我有一個 java 程序,它確實執行 shell 命令然后等待命令從 shell 退出以獲得結果。但是進程無法讀取命令的輸出,它只是將結果打印為空。但是,如果我從 shell 提示符運行相同的命令,我可以在那里看到結果打印..{[root@localhost home]# tsp -I 標記 input.mpg -P 標記 -a 10 -v 10 -O 文件 output.mpg標記:10標記:20標記:30標記:40標記:50標記:60標記:70標記:80標記:90標記:100標記:好的 [root@localhost home]#}在這里執行shell命令的Java程序{import java.io.BufferedReader;import java.io.InputStreamReader;public class ExecuteShellComand {public static void main(String[] args) { ExecuteShellComand obj = new ExecuteShellComand(); String command = "tsp -I olesmarker input.mpg -P " + "olesmarker -a 10 -v 10 -O file output.mpg"; String output = obj.executeCommand(command); System.out.println("Command Result = " + output);}private String executeCommand(String command) { StringBuilder output = new StringBuilder(); Process p; try { p = Runtime.getRuntime().exec(command); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = ""; while ((line = reader.readLine()) != null) { output.append(line + "\n"); } } catch (Exception e) { e.printStackTrace(); } return output.toString(); }}
1 回答

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
您確定您的“tsp”程序正在生成這些“標記”進度消息以達到標準嗎?一些程序正在使用 shell 標準 err 通道。特別是進行轉換的程序('-O 文件 output.mpg' 類型表示這種功能)通常使用 shell-std.out 作為轉換結果的默認輸出,并使用 shell-sdt.err 作為狀態和進度消息。(對于將命令與 shell 上的管道連接起來非常有用)。
我建議嘗試
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
代替
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
希望這可以幫助..
添加回答
舉報
0/150
提交
取消