这应该是一个简单的问题,但到目前为止我还没有找到任何直接的答案:使用
(旁注:在Windows中,我知道
这样做只会导致将
我找到的唯一线索在 此部分 的
这有点有用,但仍然留下了一些问题。在非POSIX系统上,
因此,重申我的问题:忽略进程的
process
库如何忽略Haskell进程的stderr
(或stdout
)?例如,假设我有以下内容: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系统上,这可能会导致子进程中出现奇怪的行为,因为在关闭文件后尝试读取或写入会抛出错误。这应该仅用于根本不使用文件描述符的子进程。如果您希望忽略子进程的输出,则应创建一个管道并手动排除它,或者传递一个写入到/dev/null
的Handle
。这有点有用,但仍然留下了一些问题。在非POSIX系统上,
NoStream
是否可以使用?它提到了创建一个管道,然后排除它,但我找不到任何关于如何做到这一点的信息?/dev/null
在Windows上是NUL
,除非您使用MSYS或Cygwin,在此情况下它再次是 /dev/null
(我想) - 所以我想避免那样做。因此,重申我的问题:忽略进程的
stderr
的推荐方法是什么,与操作系统无关?
typed-process
。无论如何,还是谢谢你的回答! - bradrn