3

在 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"));
}

这看起来很笨拙,但是ProcessBuilder.Redirect.NULL在 API 中没有可以使用的字段或看似任何其他方式来执行此操作。

我也有点担心这不能处理非 Unix-non-Windows 的情况(但我不确定这种情况是否存在)。

我知道Java 和类似问题的平台无关 /dev/null 输出接收器,但是使用无操作OutputStream仍然需要启动一个线程来主动丢弃输出 - 我更愿意让操作系统为我做.

4

1 回答 1

0

从 Pythonsubprocess模块的行为来看,问题中的代码片段可能就足够了。subprocess.DEVNULLusesos.devnull,而后者又来自于os.pathntpath(as nul) 或posixpath(as /dev/null) 中定义的。

这些似乎是 Python 支持的唯一路径,因此在 Java 中类似地使用nul/dev/null酌情使用就足够了。Java 可能有一个更优雅、独立于平台的选项,但如果是这样,我还没有找到它。

于 2017-02-26T08:40:58.717 回答