亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java進程命令結果無法捕獲結果

Java進程命令結果無法捕獲結果

慕容森 2021-05-31 17:50:58
我有一個 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()));

希望這可以幫助..


查看完整回答
反對 回復 2021-06-02
  • 1 回答
  • 0 關注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號