我有一个Java程序,它确实执行shell命令,然后等待命令从shell退出以获得结果。但是Process无法从命令中读取输出,只是将结果打印为空。
但是,如果我从shell提示符运行,则可以看到相同的命令。
{
[root @ localhost主页]#tsp -I标记input.mpg -P标记-a 10 -v 10 -O文件output.mpg
}
在此处执行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();
}
}
答案 0 :(得分:1)
您确定您的“ tsp”程序正在生成这些“标记”进度消息以将其标准化吗?一些程序正在使用Shell标准的err通道。尤其是进行转换的程序(“ -O文件output.mpg”表示这种功能)通常将shell-std.out用作转换结果的默认输出,而将shell-sdt.err用作状态和进度消息。 (对于将命令与外壳上的管道连接非常有用)。
我建议尝试
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
代替
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
希望这会有所帮助。