【发布时间】:2011-10-07 21:13:57
【问题描述】:
我希望在 Haskell 中有类似 bash 的 2>&1 重定向,它将 stdout 和 stderr 从一个进程组合成一个 Handle。最好直接使用System.Process.createProcess 或类似的库函数执行此操作,特别是如果它使用与 bash 重定向 w.r.t 相同的语义。交错处理来自句柄的输入。
createProcess 提供的灵活性一开始似乎很有希望:可以指定一个Handle 用于标准文件描述符,因此可以为stdout 和stderr 指定相同的Handle。但是,Handle 参数必须在调用之前已经存在。如果无法在调用函数之前凭空创建Handle,我不确定问题是否可以通过这种方式解决。
编辑:解决方案需要在任何平台上都能正常工作。
【问题讨论】:
-
您需要跨平台的方法吗?还是仅在 unix-y 系统上运行?
-
@camccann 是的;相应地更新了问题。
-
好吧,here's the answer you would have gotten 否则。从技术上讲,如果你有一个像 cygwin 这样的兼容层,这是可行的,但那是……呃。
-
确实。我目前正在开发一个使用这些东西的系统,这个问题的动机是我可以转向一种更便携的方法。
标签: haskell io subprocess