问题
我正在使用运行时从我的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);
但我没有得到任何东西作为我的输出,但当我自己运行该命令它工作正常。
#1 热门回答(172 赞)
这是要走的路:
Runtime rt = Runtime.getRuntime();
String[] commands = {"system.exe","-get t"};
Process proc = rt.exec(commands);
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(proc.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:\n");
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
更好地阅读Javadoc了解更多细节5666923414.ProcessBuilder
将是不错的选择
#2 热门回答(47 赞)
更快的方法是:
public static String execCmd(String cmd) throws java.io.IOException {
java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
这基本上是这个的浓缩版本:
public static String execCmd(String cmd) throws java.io.IOException {
Process proc = Runtime.getRuntime().exec(cmd);
java.io.InputStream is = proc.getInputStream();
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
String val = "";
if (s.hasNext()) {
val = s.next();
}
else {
val = "";
}
return val;
}
我知道这个问题已经过时但是我发布了这个答案,因为我觉得这可能会更快。
#3 热门回答(10 赞)
除了使用ProcessBuilder
建议Senthil,一定要阅读并实施所有的建议When Runtime.exec() won't。