Это должен быть простой вопрос, но пока я не нашел прямого ответа на него: как игнорировать stderr
(или stdout
) процесса на Haskell, используя process
библиотека ?Например, допустим, у меня есть следующее:
let proc = (shell "dir /z") {
std_in = UseHandle stdin
, std_out = CreatePipe
}
(_, out, _, rProc) <- createProcess Proc
exitCode <- waitForProcess rProc
(Примечание: в Windows я знаю, что у dir
нет переключателя /z
. Вот почему я выбрал его - такЯ мог бы получить интересный вывод о stderr
.)
В результате этого только stderr
будет выведено на консоль.Теперь допустим, я хочу игнорировать stderr
.Как мне это сделать?
Единственный ключ, который я нашел, находится в этой части документации process
:
NoStream
Закройте дескриптор файла потока, не передавая дескриптор.В системах POSIX это может привести к странному поведению в дочернем процессе, поскольку попытка чтения или записи после закрытия файла приводит к ошибке.Это должно использоваться только с дочерними процессами, которые вообще не используют файловый дескриптор.Если вы хотите игнорировать вывод дочернего процесса, вы должны либо создать канал и слить его вручную, либо передать Handle
, который записывает в /dev/null
.
Это несколько полезно, но все же оставляет некоторыевопросы без ответа.Можно ли использовать NoStream
в системах без POSIX?Это относится к созданию канала и его дренированию, но я не могу найти информацию о том, как это сделать?И /dev/null
- это NUL
в Windows, за исключением случаев, когда вы используете MSYS или Cygwin, когда он снова /dev/null
(я думаю) - поэтому я хочу избежать этого.
Итак, чтобы повторить мой вопрос: какой рекомендуемый, независимый от ОС способ игнорировать stderr
процесса?