猿问

Java进程命令结果无法捕获结果

我有一个 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();

    }


}


慕容森
浏览 195回答 1
1回答

梵蒂冈之花

您确定您的“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()));希望这可以帮助..
随时随地看视频慕课网APP

相关分类

Java
我要回答