我想从haskell 程序中调用一个进程并捕获stdout 以及stderr。
我所做的:
(_, stdout, stderr) <- readProcessWithExitCode "command" [] ""
问题:通过这种方式,stdout 和 stderr 被分别捕获,但是我希望消息出现在正确的位置(否则我会简单地stdout ++ stderr
将错误消息与其对应的 stdout 分开)。
我知道如果我将输出通过管道传输到文件中,我可以实现这一点,即
tmp <- openFile "temp.file" ...
createProcess (proc "command" []) { stdout = UseHandle tmp,
stderr = UseHandle tmp }
所以我目前的解决方法是将输出通过管道传输到临时文件并将其读回。但是我正在寻找一种更直接的方法。
如果我肯定在 unix 上,我会简单地调用一个 shell 命令 á la
command 2>&1
就是这样。但是,我希望它尽可能便携。
我需要这个:我已经构建了一个很小的 haskell cgi 脚本(只是为了玩它),它调用某个程序并打印输出。我想对输出进行 html 转义,因此我不能简单地将其通过管道传输到标准输出。
我在想:也许可以创建一个内存中的句柄,比如 Java 中的 PipedInputStream/PipedOutputStream,或者允许在内存中处理 IO 流的 ArrayInputStream/ArrayOutputStream。我四处寻找:: Handle
关于hoogle的功能,但没有找到任何东西。
也许还有另一个 Haskell 模块可以让我合并两个流?