在Unix上,您可以使用以下命令丢弃进程输出:
NUL
在Windows上,您需要使用File devNull = new File("/dev/null");
if (devNull.exists()) {
pb.redirectOutput(devNull);
} else {
pb.redirectOutput(new File("NUL"));
}
。对于支持任意平台,是否有比下面的代码更好的选项?
ProcessBuilder.Redirect.NULL
这看起来很糟糕,但是没有OutputStream
字段可供使用,或者似乎在API中以任何其他方式执行此操作。
我也有点担心这不处理非Unix非Windows的情况(但我不确定是否存在这种情况)。
我知道platform-independent /dev/null output sink for Java和类似的问题,但是使用no-op Main
仍然需要启动线程来主动丢弃输出 - 我更愿意让操作系统执行此操作对我来说。
答案 0 :(得分:0)
从Python的subprocess
模块的行为来看,问题中的代码片段可能就足够了。 subprocess.DEVNULL
uses os.devnull
,comes from os.path
,ntpath
(\"\$@\"
)或posixpath
(nul
)定义的https://github.com/googlesamples/google-services。
这些似乎是Python支持的唯一路径,因此在Java中使用/dev/null
或nul
同样适当。对于Java,可能有一个更优雅,独立于平台的选项,但如果是这样,我还没有找到它。