Heim  >  Fragen und Antworten  >  Hauptteil

„Verwenden von ProcessBuilder zur Ausgabeumleitung“

<p>Ich versuche, die Ausgabe eines von ProcessBuilder gestarteten Prozesses mit dem folgenden Code umzuleiten: </p> <pre class="brush:php;toolbar:false;">ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &"); Map<String, String> env.clear(); env.put("var1", "val1"); env.put("var2", "val2"); pb.redirectErrorStream(true); Prozess p = pb.start();</pre> <p>Aber es schlug fehl und löste eine Ausnahme aus: </p> <blockquote> <p>Ausnahme im Thread „main“ java.io.IOException: Kann nicht ausgeführt werden Programm "/myScript>> /myLogFile 2>&1 <& - &": java.io.IOException: Fehler=2, Keine solche Datei oder kein solches Verzeichnis unter java.lang.ProcessBuilder.start(ProcessBuilder.java:460)</p> </blockquote> <p>Wenn ich einfach „/myScript“ übergebe, funktioniert es einwandfrei. </p> <p>Das Skript ist Perl. Gibt es Vorschläge/Kommentare dazu, warum es fehlschlägt? </p> <p>Ich habe versucht, sie als separate Parameter wie <code>new ProcessBuilder("/myScript",">>","/myLogFile")</code> zu übergeben, und es hat funktioniert, aber es erfolgt keine Weiterleitung Protokolldateien, noch werden envVars akzeptiert. </p>
P粉517090748P粉517090748422 Tage vor425

Antworte allen(2)Ich werde antworten

  • P粉204079743

    P粉2040797432023-08-25 10:53:05

    根据您的要求,从Java7开始,您可以继续使用ProcessBuilder,只需将可执行文件作为参数,并使用ProcessBuilder类中的redirectInput()redirectOutput()redirectError()来重定向/拦截其输出流。

    Antwort
    0
  • P粉818088880

    P粉8180888802023-08-25 10:07:03

    Shell重定向操作符在ProcessBuilder中是未知的。将您的命令放在一个shell脚本中并执行它,如这里所示。或者,使用bash -c,如这里所示。

    Antwort
    0
  • StornierenAntwort