Java 使用ProcessBuilder放弃out/err的独立于平台的方法
在Unix上,您可以通过以下方式放弃进程的输出:Java 使用ProcessBuilder放弃out/err的独立于平台的方法,java,processbuilder,dev-null,Java,Processbuilder,Dev Null,在Unix上,您可以通过以下方式放弃进程的输出: pb.redirectOutput(new File("/dev/null")); 在Windows上,您需要使用NUL。对于支持任意平台,有没有比下面的代码片段更好的选项 File devNull = new File("/dev/null"); if (devNull.exists()) { pb.redirectOutput(devNull); } else { pb.redirectOutput(new File("NUL"))
pb.redirectOutput(new File("/dev/null"));
在Windows上,您需要使用NUL
。对于支持任意平台,有没有比下面的代码片段更好的选项
File devNull = new File("/dev/null");
if (devNull.exists()) {
pb.redirectOutput(devNull);
} else {
pb.redirectOutput(new File("NUL"));
}
这看起来很麻烦,但是在API中没有一个ProcessBuilder.Redirect.NULL
字段可供使用,或者似乎没有任何其他方法来实现这一点
我也有点担心这不能处理非Unix非Windows的情况(但我不确定是否存在这种情况)
我知道和类似的问题,但是使用no-op
OutputStream
仍然需要旋转一个线程来主动放弃输出-我更愿意让操作系统为我做这件事。从Python模块的行为判断,问题中的代码片段可能就足够了,依次定义为(asnul
)或(as/dev/null
)
这些似乎是Python支持的唯一路径,因此同样地,在Java中适当地使用
nul
或/dev/null
应该足够了。Java可能有一个更优雅、独立于平台的选项,但如果是这样,我还没有找到它。在阅读了本主题的所有其他堆栈溢出线程之后,我做了同样的事情。我认为这是一个体面的解决办法。