为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信