我正在使用ProcessBuilder来执行命令并重定向输出。现在我想增加完全没有输出的可能性。
当然,我可以将输出重定向到文件,但这会在用户系统上留下不必要的文件。
我正在寻找的解决方案是:
- 适用于所有平台,包括Windows(例如,不要重定向到/dev/null)
- 不要滥用try-catch(例如,重定向到null并忽略异常)
我能找到的唯一方法是:
ProcessBuilder processBuilder = new ProcessBuilder(command);
if (suppressOutput) {
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
}
但是这会输出到底层的shell,与字面意义上的“没有输出”不符。
这是我使用ProcessBuilder而未禁止输出的示例:
ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.directory(new File(workingdir));
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
while (process.isAlive()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) { }
// check for termination request
if (terminationRequest()) {
process.destroy();
return -1;
}
}
return process.exitValue();