我正在嘗試使用 Runtime.getRuntime().exec() 來呼叫一個程式,就好像它是從終端呼叫的一樣,但它在讀取第一個檔案后因致命錯誤而崩潰。
在終端中,我像這樣運行命令:
mace4 -c -f inputFile.in > outputFile.out
它按預期作業,從第一個檔案讀取并在第二個檔案中輸出。
在 Java 中,我嘗試以這種方式運行它:
String args[] = new String[]{"mace4", "-c", "-f", inputFileName ,">",outputFileName};
try {
String s;
Process proc = Runtime.getRuntime().exec(args, null, new File("/home/user/workDirectory/"));
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
while ((s = br.readLine()) != null)
System.out.println("line: " s);
proc.waitFor();
proc.destroy();
一旦程式到達第一個檔案的末尾,它就會拋出:
致命錯誤:read_all_input,檔案 > 未找到
該程式很舊,我似乎無法找到一種方法來從中獲取更詳細的錯誤。
我嘗試用這些引數呼叫它{"sh or bash ", "-c", "mace4", "-c", "-f", inputFileName ,">",outputFileName}使程式運行然后凍結(或至少控制臺中沒有出現任何內容)。我是否錯誤地呼叫了終端命令,如果是,我應該更改什么?
PS:這是我在這里的第一個問題,如果我錯過了什么,我很抱歉..
uj5u.com熱心網友回復:
看起來您正在嘗試使用 Bash 輸出重定向運算子>。這會將您正在運行的程式的輸出重定向到檔案(或其他程式)
這個答案解釋了如何使用 ProcessBuilder 來做到這一點,它應該適用于你在這里嘗試做的事情。
例如:
ProcessBuilder pb = new ProcessBuilder("mace4", "-c", "-f", inputFileName);
pb.redirectOutput(new File(outputFileName));
Process p = pb.start();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346793.html
