如何将进程的stdout和stderr传递给同一个Handle?

tib*_*bbe 6 windows haskell

如何将进程的stdout和stderr传递给同一个Handle?在unix系统上,它非常简单,只需使用createPipe并将写端传递给runProcessstdout和stderr.在Windows上,它更难:

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

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

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

arr*_*owd 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
Run Code Online (Sandbox Code Playgroud)

StdStream有这个构造函数:

data StdStream = UseHandle Handle
Run Code Online (Sandbox Code Playgroud)

之后,将您形成的对象传递给createProcess函数来运行您的过程。