【问题标题】:Java process command result fail to capture resultJava进程命令结果捕获结果失败
【发布时间】:2018-07-18 10:08:25
【问题描述】:

我有一个 java 程序,它确实执行 shell 命令,然后等待命令从 shell 退出以获得结果。但是进程无法读取命令的输出,它只是将结果打印为空。

但是,如果我从 shell 提示符运行相同的命令,我可以看到结果打印在那里..

{

[root@localhost home]# tsp -I marker input.mpg -P marker -a 10 -v 10 -O file 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();
    }

}

【问题讨论】:

  • 你试过调试器吗?

标签: java linux shell process


【解决方案1】:

您确定您的“tsp”程序正在生成这些“标记”进度消息以标准输出吗?一些程序正在使用 shell 标准错误通道。尤其是进行转换的程序('-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()));

希望这会有所帮助..

【讨论】:

  • 你是对的.. tsp 正在写入标准错误通道。我更改了程序以从 ErrorStream 中获取它。它开始在我的 java 程序中打印。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 2021-03-08
相关资源
最近更新 更多