Java runtime.getruntime()从执行命令行程序获得输出

Java runtime.getruntime()从执行命令行程序获得输出

我正在使用运行时从我的Java程序运行命令提示符命令。但是,我不知道如何获得命令返回的输出。

这是我的代码:

Runtime rt = Runtime.getRuntime();String[] commands = {"system.exe" , "-send" , argument};Process proc = rt.exec(commands);

我试着做System.out.print(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);

但是,我没有得到任何作为我的输出,但当我运行该命令自己,它工作良好。


慕村9548890
浏览 10242回答 4
4回答

冉冉说

这就是我们要走的路:Runtime&nbsp;rt&nbsp;=&nbsp;Runtime.getRuntime();String[]&nbsp;commands&nbsp;=&nbsp;{"system.exe","-get&nbsp;t"};Process&nbsp;proc&nbsp;=&nbsp;rt.exec(commands); BufferedReader&nbsp;stdInput&nbsp;=&nbsp;new&nbsp;BufferedReader(new&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader(proc.getInputStream()));BufferedReader&nbsp;stdError&nbsp;=&nbsp;new&nbsp;BufferedReader(new&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader(proc.getErrorStream()));//&nbsp;read&nbsp;the&nbsp;output&nbsp;from&nbsp;the&nbsp;command &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Here&nbsp;is&nbsp;the&nbsp;standard&nbsp;output&nbsp;of&nbsp;the&nbsp;command:\n");String&nbsp;s&nbsp;=&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((s&nbsp;=&nbsp;stdInput.readLine())&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s);}//&nbsp;read&nbsp;any&nbsp;errors&nbsp;from&nbsp;the&nbsp;attempted&nbsp;command &nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Here&nbsp;is&nbsp;the&nbsp;standard&nbsp;error&nbsp;of&nbsp;the&nbsp;command&nbsp;(if&nbsp;any):\n");while&nbsp;((s&nbsp;=&nbsp;stdError.readLine())&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s);}更好地阅读Javadoc以获得更多细节。这里.&nbsp;ProcessBuilder是个很好的选择

回首忆惘然

一个更快的方法是:public&nbsp;static&nbsp;String&nbsp;execCmd(String&nbsp;cmd)&nbsp;throws&nbsp;java.io.IOException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;java.util.Scanner&nbsp;s&nbsp;=&nbsp;new&nbsp;java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A"); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;s.hasNext()&nbsp;?&nbsp;s.next()&nbsp;:&nbsp;"";}这基本上是一个浓缩的版本:public&nbsp;static&nbsp;String&nbsp;execCmd(String&nbsp;cmd)&nbsp;throws&nbsp;java.io.IOException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Process&nbsp;proc&nbsp;=&nbsp;Runtime.getRuntime().exec(cmd); &nbsp;&nbsp;&nbsp;&nbsp;java.io.InputStream&nbsp;is&nbsp;=&nbsp;proc.getInputStream(); &nbsp;&nbsp;&nbsp;&nbsp;java.util.Scanner&nbsp;s&nbsp;=&nbsp;new&nbsp;java.util.Scanner(is).useDelimiter("\\A"); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;val&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(s.hasNext())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;=&nbsp;s.next(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;val;}我知道这个问题已经过时了,但我在贴出这个答案是因为我认为这可能会更快一些。

一只斗牛犬

除了使用ProcessBuilder如森提建议的那样,一定要阅读并执行全的建议当Runtime.exec()不会.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java