Java Runtime.getRuntime():从执行命令行程序获取输出
||
我正在使用运行时从Java程序运行命令提示符命令。但是,我不知道如何获得命令返回的输出。
这是我的代码:
Runtime rt = Runtime.getRuntime();
String[] commands = {\"system.exe\", \"-send\" , argument};
Process proc = rt.exec(commands);
我尝试做System.out.println(proc);
,但是那什么也没返回。该命令的执行应返回两个数字,以分号分隔。我怎样才能在变量中打印出来?
这是我现在正在使用的代码:
String[] commands = {\"system.exe\", \"-get t\"};
Process proc = rt.exec(commands);
InputStream stdIn = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(stdIn);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println(\"<OUTPUT>\");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println(\"</OUTPUT>\");
int exitVal = proc.waitFor();
System.out.println(\"Process exitValue: \" + exitVal);
但是我没有得到任何输出,但是当我自己运行该命令时,它可以正常工作。
没有找到相关结果
已邀请:
11 个回复
讼乐
在此处阅读Javadoc以获得更多详细信息。
将是一个不错的选择。
荤碗
基本上,这是它的精简版:
我知道这个问题很旧,但是我发布这个答案是因为我认为这可能会更快。
桑娠贯涤
之外,请务必阅读并实现When Runtime.exec()不会执行的所有建议。
埃输林桨铃
莽缓逢
。这是使用
并为命令指定环境变量和工作文件夹的示例:
碉罕城爸
疾很毋悲
输出具有有限的缓冲区。如果您不同时收听它们,那么当您尝试阅读另一种时,它们中的一种会填满。例如,当进程正在等待写入
时,您可能正在等待从ѭ13读取。您无法从
缓冲区读取数据,因为该缓冲区为空,并且该进程由于已满而无法写入
缓冲区。你们彼此永远在等待。 这是一种在没有死锁风险的情况下读取进程输出的可能方法:
关键是要使用“ 20”,它将“ 14”重定向到“ 13”流中。这使您无需在read13ѭ和
之间切换就可以读取单个流。如果要手动实现此功能,则必须在两个不同的线程中使用流,以确保永不阻塞。
悸翠疮武昏
藐刚
类函数:
豆兢
席陋临拈
如果该进程正在打印错误输出,则可能还需要读取错误流(
)。如果使用
,则可以将错误流重定向到输入流。