从java代码获取cmd命令的输出
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20803664/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Get output of cmd command from java code
提问by hakuna matata
I have a program where I was able to successfully execute cmd commands from my code, but I want to be able to get the output from the cmd command. How can I do that?
我有一个程序,可以从我的代码中成功执行 cmd 命令,但我希望能够从 cmd 命令中获取输出。我怎样才能做到这一点?
So far my code is:
到目前为止,我的代码是:
Second.java:
二.java:
public class Second {
public static void main(String[] args) {
System.out.println("Hello world from Second.java");
}
}
and Main.java
和 Main.java
public class Main {
public static void main(String[] args) {
String filename = args[1].substring(0, args[1].length() - 5);
String cmd1 = "javac " + args[1];
String cmd2 = "java " + filename;
Runtime r = Runtime.getRuntime();
Process p = r.exec(cmd1); // i can verify this by being able to see Second.class and running it successfully
p = r.exec(cmd2); // i need to see this output to see if
System.out.println("Done");
}
}
I can check the first command is working successfully by checking for Second.class, but what if this class generated some error, how will I be able to see that error?
我可以通过检查 Second.class 来检查第一个命令是否成功运行,但是如果这个类产生了一些错误,我怎么能看到那个错误呢?
采纳答案by Elliott Frisch
You need to the OutputStream (InputStream) of your Process (and you should use a ProcessBuilder)... like so
你需要你的进程的输出流(输入流)(你应该使用一个 ProcessBuilder)......像这样
public static void main(String[] args) {
String filename = args[1].substring(0, args[1].length() - 5);
String cmd1 = "javac " + args[1];
String cmd2 = "java " + filename;
try {
// Use a ProcessBuilder
ProcessBuilder pb = new ProcessBuilder(cmd1);
Process p = pb.start();
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
int r = p.waitFor(); // Let the process finish.
if (r == 0) { // No error
// run cmd2.
}
} catch (Exception e) {
e.printStackTrace();
}
}
回答by T McKeown
look here: Extracting a process's exit code in the case of ThreadInterrupted
看这里: 在 ThreadInterrupted 的情况下提取进程的退出代码
You need to get the return code... you must wait for it.
你需要得到返回码……你必须等待它。
回答by Paul Lo
A general example to get the return from a command would be:
从命令中获取返回的一般示例是:
Process p = null;
try {
p = p = r.exec(cmd2);
p.getOutputStream().close(); // close stdin of child
InputStream processStdOutput = p.getInputStream();
Reader r = new InputStreamReader(processStdOutput);
BufferedReader br = new BufferedReader(r);
String line;
while ((line = br.readLine()) != null) {
//System.out.println(line); // the output is here
}
p.waitFor();
}
catch (InterruptedException e) {
...
}
catch (IOException e){
...
}
finally{
if (p != null)
p.destroy();
}