6

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

  • unix-compat 和 Win32 包都没有导出创建管道的方法。

  • openTempFile(可用于模拟管道)在 created 上设置错误的模式Handle

Handle编辑:提供更多上下文:我想运行一个进程并让它以跨平台的方式将其 stdout 和 stderr 写入相同的。

4

2 回答 2

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。

于 2012-10-29T03:22:30.830 回答
0

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

我们可能应该在某个时候把它放在更容易访问的地方。

于 2012-10-30T04:24:26.903 回答