2011-05-13 143 views
3

我試圖重定向過程的輸出開始的ProcessBuilder的幫助下使用下面的代碼的ProcessBuilder重定向輸出

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(); 

但與例外的線程失敗

異常「主要」 的java .io.IOException:無法運行 程序 「/ myScript >> /myLogFile 2> & - & 「:java.io.IOException異常: 錯誤= 2,在 java.lang.ProcessBuilder.start(ProcessBuilder.java:460)沒有這樣的文件或目錄

時,我只是通過它工作正常」/ myScript「

腳本是perl,任何建議/評論爲什麼它失敗?

我試過將它們全部作爲獨立參數傳遞,如new ProcessBuilder("/myScript",">>","/myLogFile"),它會執行,但它不會重定向到日誌文件,也不會使用envVars。

回答

6

殼牌重定向運營商不知道ProcessBuilder。將你的命令放在一個shell腳本中並執行它,如here所示。或者,使用bash -c,如here所示。

+2

是的,謝謝,看起來像Java 7將有能力明確指定重定向。 – Chandra 2011-05-13 02:12:14

0

作爲指定,從Java7可以繼續使用的ProcessBuilder與僅可執行文件作爲參數並重定向/截距其輸出流,使用redirectInput()redirectOutput()和從ProcessBuilderredirectError()