"使用ProcessBuilder進行輸出重新導向"
P粉517090748
P粉517090748 2023-08-24 20:26:08
0
2
487
<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粉517090748
P粉517090748

全部回覆(2)
P粉204079743

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

P粉818088880

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板