Независимый от платформы способ отбросить / ошибиться с помощью ProcessBuilder
В 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-не-Windows (но я не уверен, существует ли такой случай).
Я знаю о платформно-независимом /dev/null выходном приемнике для Java и подобных вопросах, однако использую no-op OutputStream
все еще требует раскручивания потока, чтобы активно отбрасывать вывод - я бы предпочел, чтобы ОС сделала это за меня.
1 ответ
Судя по поведению Питона subprocess
Модуль фрагмент кода в вопросе, вероятно, достаточно. subprocess.DEVNULL
использования os.devnull
который в свою очередь исходит от os.path
который определяется либо в ntpath
(как nul
) или же posixpath
(как /dev/null
).
Похоже, это единственные пути, которые поддерживает Python, поэтому аналогично nul
или же /dev/null
при необходимости должно быть достаточно в Java. Может быть более элегантный, независимый от платформы вариант для Java, но в таком случае я его не нашел.