如何将一个进程的标准输出和标准错误输出到同一个句柄?

如何将一个进程的标准输出和标准错误输出到同一个句柄? 在unix系统上,这非常简单,只需使用createPipe ,并将写入端作为stdout和stderr传递给runProcess 。 在Windows上更难:

编辑:给一些更多的上下文:我想运行一个进程,并以跨平台的方式写它的stdout和stderr到相同的Handle

Solutions Collecting From Web of "如何将一个进程的标准输出和标准错误输出到同一个句柄?"

你可以使用来自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。

我最终实现了一个跨平台的createPipe : https : //github.com/haskell/cabal/blob/master/Cabal/tests/Distribution/Compat/CreatePipe.hsc

我们应该把它放在某个地方更容易接近的地方。