与平台无关的方法使用ProcessBuilder丢弃/错误

时间:2016-12-20 17:51:10

标签: java processbuilder dev-null

在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仍然需要启动线程来主动丢弃输出 - 我更愿意让操作系统执行此操作对我来说。

1 个答案:

答案 0 :(得分:0)

从Python的subprocess模块的行为来看,问题中的代码片段可能就足够了。 subprocess.DEVNULL uses os.devnullcomes from os.pathntpath\"\$@\")或posixpathnul)定义的https://github.com/googlesamples/google-services

这些似乎是Python支持的唯一路径,因此在Java中使用/dev/nullnul同样适当。对于Java,可能有一个更优雅,独立于平台的选项,但如果是这样,我还没有找到它。