2016-04-01 30 views
0

我在使用>操作符寫入文件Process Builder時遇到了問題。實際的過程將運行良好,讓我解析使用InputStreamReader等解析輸出。我希望使用命令行將過程寫入文件,例如> test.json。Java ProcessBuilder問題

這裏是我的代碼

try { 
    //process builder used to run a Python script 
    ProcessBuilder process = new ProcessBuilder("python", 
    System.getProperty("user.dir")+"\\createJson.py","--structure","cloc.csv", 
            "--weights","EntityEffort.csv",">","a.json"); 

    process.directory(new File("c:\\users\\chris\\desktop\\test2")); 
    Process p = process.start(); 

} catch(Exception e) { 
    e.printStackTrace(); 
} 
+0

您是否收到任何異常或者是僅限於無法獲取輸出文件的問題? –

+1

重定向符號由命令shell解釋。在Linux中,你必須調用一個shell(即bash)然後執行命令行。我不發佈這個作爲答案,因爲我不確定這是如何工作在Windows中(即cmd.exe被調用在這裏的封面),但我懷疑你需要調用cmd.exe並將它傳遞給你想要的命令行執行。 –

回答

1

由於@JimGarrison指出,>由shell來解釋。這裏您直接啓動了一個沒有shell的createJson.py進程。

在UNIX中可以使用的ProcessBuilder使用來啓動一個shell:

process = new ProcessBuilder("bash", "someCommand", ">", "outputfile"); 

同樣的事情也可能會與Windows和cmd.exe工作。

但是,這不是很好的做法。這是命令注入攻擊的機會。調用外部流程是最後一招,你應該儘量減少你在這些流程中做的事情。

所以,你最好堅持使用你所擁有的東西,並在Java中處理重定向到文件。 ProcessBuilder javadoc舉了一個例子:

File log = new File("log"); 
processBuilder.redirectOutput(Redirect.appendTo(log));