2012-06-07 56 views
1

我想用Java执行操作系统命令,然后打印出它的返回值。就像这样:将操作系统命令的输出写入控制台

这就是我想...

String location_of_my_exe_and_some_parameters = "c:\\blabla.exe /hello -hi"; 
Runtime.getRuntime().exec(location_of_my_exe_and_some_parameters); 

我试图把一个是System.out.print()在我运行...行的开头,但失败了。因为,显然,getRuntime() returns a Runtime object

现在,问题是,当我在命令行执行“blabla.exe/hello -hi”命令时,我得到如下结果:“您执行了一些命令,欢呼!”。但是,在Java中,我一无所获。

我试图把返回值放入一个Runtime对象,一个Object对象。但是,他们都失败了。我怎样才能做到这一点?

问题就迎刃而解了 - 这是我的解决方案

Process process = new ProcessBuilder(location, args).start(); 
InputStream is = process.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String line; 

while ((line = br.readLine()) != null) { 
    System.out.println(line); 
} 

回答

1

注意Runtime.exec(...)返回Process对象。你可以使用这个对象来捕捉它的输入流和检索不管它打印到标准输出:

Process p = Runtime.getRuntime().exec(location_of_my_exe_and_some_parameters); 
InputStream is = p.getInputStream(); 

// read process output from is 
+0

非常感谢你。感谢您亲切,礼貌和快速。 –

+1

@John Doe:确保标记对您最有帮助的答案,以便将来读者快速找到答案。 – Tudor

+0

我认为我不能标记或投票。我没有足够的“业力”。 –

1

您可以捕捉使用此命令的输出:

Runtime rt = Runtime.getRuntime(); 
Process pr = rt.exec(command); 
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
String line=null; 

while((line=input.readLine()) != null) { 
    log.info(line); 
} 
    //This will wait for the return code of the process 
int exitVal = pr.waitFor(); 
+0

非常感谢。 –

0

UseProcessBuilder,而不是运行。

像:

Process process = new ProcessBuilder("c:\\blabla.exe","param1","param2").start();

答:

Process process = new ProcessBuilder("c:\\blabla.exe","/hello","-hi").start(); 
InputStream is = process.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String line; 

System.out.printf("Output of running %s is:", Arrays.toString(args)); 
+0

非常感谢。 –

相关问题