首頁  >  問答  >  主體

"使用ProcessBuilder進行輸出重新導向"

<p>我正在嘗試使用以下程式碼將ProcessBuilder啟動的進程的輸出重定向:</p> <pre class="brush:php;toolbar:false;">ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &"); Map<String, String> env = pb.environment(); env.clear(); env.put("var1", "val1"); env.put("var2", "val2"); pb.redirectErrorStream(true); Process p = pb.start();</pre> <p>但它失敗了,拋出例外:</p> <blockquote> <p>Exception in thread "main" java.io.IOException: Cannot run program "/myScript >> /myLogFile 2>&1 <& - &": java.io.IOException: error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)</p> </blockquote> <p>當我只傳遞"/myScript"時,它正常工作。 </p> <p>腳本是perl,為什麼它失敗的任何建議/評論? </p> <p>我嘗試將它們作為單獨的參數傳遞,例如<code>new ProcessBuilder("/myScript",">>","/myLogFile")</code>,它可以執行,但不會重新導向到日誌文件,也不會接受envVars。 </p>
P粉517090748P粉517090748422 天前428

全部回覆(2)我來回復

  • P粉204079743

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

    根據您的要求,從Java7開始,您可以繼續使用ProcessBuilder,只需將執行檔作為參數,並使用ProcessBuilder類別中的redirectInput()redirectOutput()redirectError()來重定向/攔截其輸出流。

    回覆
    0
  • P粉818088880

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

    Shell重定向運算子在ProcessBuilder中是未知的。將您的命令放在一個shell腳本中並執行它,如這裡所示。或者,使用bash -c,如這裡所示。

    回覆
    0
  • 取消回覆