我有一个 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()));
希望这可以帮助..
添加回答
举报
0/150
提交
取消