如何将进程的stdout和stderr传递给同一个Handle?在unix系统上,它非常简单,只需使用createPipe
并将写入端作为stdout和stderr传递给runProcess
。在Windows上,它更难:
unix-compat和Win32包都没有导出创建管道的方法。
openTempFile
(可用于模拟管道)在创建的Handle
上设置了错误的模式。
编辑:提供更多上下文:我想运行一个进程,让它以跨平台的方式将stdout和stderr写入同一个Handle
。
答案 0 :(得分:2)
您可以使用System.Process中的内容。在CreateProcess
定义中有
std_in :: StdStream, -- ^ How to determine stdin
std_out :: StdStream, -- ^ How to determine stdout
std_err :: StdStream, -- ^ How to determine stderr
和StdStream
有这个构造函数:
data StdStream = UseHandle Handle
之后,将您形成的对象传递给createProcess
函数以运行proc。
答案 1 :(得分:0)
我最终实施了跨平台createPipe
:https://github.com/haskell/cabal/blob/master/Cabal/tests/Distribution/Compat/CreatePipe.hsc
我们应该把它放在某个地方更容易接近的地方。