我正在尝试从command.com 而不是 cmd.exe读取输出,所以我尝试使用此代码:
Process p=Runtime.getRuntime().exec("command /c echo goodbye world"); //command.com doesn't work eiher
p.waitFor();
BufferedReader reader=new BufferedReader(
new InputStreamReader(p.getInputStream())
);
String line="";
String output="";
while((line = reader.readLine()) != null)
{
output+=line;
}
System.out.print(line);
不幸的是,它没有打印任何东西,但是当我完全用cmd替换命令时它可以工作。 我已经尝试过在cmd中运行'命令/ c echo goodbye world',它可以工作。 我在Windows和XP中尝试过这个代码,因为在新的Windows版本中不存在command.com。
答案 0 :(得分:0)
您可以尝试修改命令命令将其输出发送到文件,然后在p.waitFor()完成后,您可以从该文件中读取输入。
Process p=Runtime.getRuntime().exec("command /C echo goodbye world > output.txt");
这是一个猜测,但也许command.com解释器在/ C开关上区分大小写。也许尝试使用upper-C来看看会发生什么。此外,您可以使用ProcessBuilder而不是Process,因为它可以让您将命令的stderr重定向到stdout,以便您可以从输入流中收集它们。
答案 1 :(得分:0)
尝试捕获error output和exit code - 如果您在标准输出中没有看到任何内容,则错误信息流中可能会出现错误消息。如果它也是空的,退出代码可能会提供一些额外的调试细节。您可以咨询Windows exit code table以尝试确定退出的原因。
我的猜测是,由于某种原因,JVM无法以调用command
的方式调用cmd
(并且错误流包含此消息)。也许command
不在JVM的PATH
上,或者实际上不能从系统的shell中调用。您还可以尝试指定command.com
可执行文件的完整路径。
顺便说一下,在编写像你一样的字符串时,你应该总是使用mutable StringBuilder
;它使用更少的内存。更好的是library do the work for you。