2012-09-11 15 views
5

Ich verwende normalerweise java.lang.ProcessBuilder und java.lang.Process, um externe Befehlszeilenprogramme auszuführen, und es funktioniert gut für run-and-done-Befehle. Zum Beispiel wäre dies „MyProgram“ mit dem Argument „myArg“ im Arbeitsverzeichnis laufen:führen Sie interaktive Befehlszeilenanwendung von Java

List<String> commandLine = new ArrayList<String>(); 
commandLine.add("myProgram"); 
commandLine.add("myArg"); 
ProcessBuilder builder = new ProcessBuilder(commandLine); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 

jedoch sagen, ich wollte ein Skript oder Programm oder etwas auszuführen, die interaktive Eingabe hatte (es mich dazu veranlasst, um weitere Eingabe nach dem Start). Kann ich das in Java mit einem Code ähnlich dem oben tun, oder brauche ich einen anderen Ansatz? Oder gibt es eine Bibliothek, die mir dabei helfen kann?

Antwort

4

Nach the documentation sollten Sie die Eingabe- und Ausgabeströme umleiten können. Dies erzählt die System.in/System.out aus dem übergeordneten Prozess zu verwenden:

builder.redirectInput(ProcessBuilder.Redirect.INHERIT); 
builder.redirectOutput(ProcessBuilder.Redirect.INHERIT); 

Wenn Sie die Dinge, um die Prozesse der Eingabe schreiben wollen:

Wenn die Quelle Redirect.PIPE (Anfangswert) Dann kann die Standardeingabe eines Subprozesses mit dem von Process.getOutputStream() zurückgegebenen Ausgabedatenstrom geschrieben werden. Wenn die Quelle auf einen anderen Wert gesetzt ist, gibt Process.getOutputStream() einen Null-Ausgabestream zurück.

+0

mit stdin suchen und stdout Sie System.in und System.out bedeuten? – 11684

+0

@ 11684 Ja, ich habe die Antwort aktualisiert. –

+0

Danke! Ich habe das schon eine Weile gesucht. – dantiston

0

Die Umleitung von stdin und stdout ist sicherlich eine Option für einfache Befehlszeilenprogramme.

ein "Roboter" Klasse verwenden ist eine andere, wenn Sie tatsächlich Skript Tastatureingaben müssen (zum Beispiel in einem Testskript):

Schreiben einer einfachen .bat-Datei oder eines Shell-Skripts, das Ihr Java-Programm aufruft und die Umleitungsoperatoren "<" und ">" verwendet, ist a dritte Option.

Es hängt alles genau auf, was Sie für :)

+0

Ich möchte im Grunde bestätigen Bestätigungsaufforderungen für ein Programm, das keine --force-Flag oder gleichwertig hat. – smcg

+0

Können Sie das Programm in einem Shell-Skript ausführen? Wenn ja, wäre das ausreichend? – paulsm4

+0

wäre es ein Klotz. – smcg

Verwandte Themen