这基本上就是我想要做的:我创建了一个模拟命令行的Process
。像这样:
private Process getProcess() {
ProcessBuilder builder = new ProcessBuilder("C:/Windows/System32/cmd.exe");
Process p = null;
try {
p = builder.start();
} catch (IOException e1) {
e1.printStackTrace();
}
return p;
}
现在,我可以使用命令“提供”此过程:
BufferedWriter p_stdin = new BufferedWriter(
new OutputStreamWriter(process.getOutputStream()));
try {
p_stdin.write("dir"); // Just a sample command
p_stdin.newLine();
p_stdin.flush();
} catch (IOException e) {
e.printStackTrace();
return "Failed to run " + fileName;
}
我现在要做的是等待命令,即我的进程的子进程完成。我怎样才能做到这一点?我知道我可以使用waitFor()
方法等待进程,但是子进程呢?
答案 0 :(得分:1)
dir
命令不是子进程,而是在cmd
内部执行。但是,无论如何,这并不是很相关:从Java的角度来看,在子进程中启动的任何其他命令的行为都是相同的。
要等待dir
命令完成,您必须解释来自cmd
的传入标准输出,并在再次打印提示时实现。不过,这是一个非常脆弱的机制。
在任何情况下,您目前根本不消耗cmd
的标准输出,这将导致它很快阻止,永远不会恢复。