acf*_*zer 15 io haskell subprocess
我想有一些像bash的2>&1哈斯克尔结合重定向stdout并stderr从过程到一个单一的Handle.使用System.Process.createProcess或类似的库函数直接执行此操作会很好,特别是如果它使用与来自句柄的bash重定向wrt交错输入相同的语义.
createProcess最初提供的灵活性似乎很有希望:可以指定Handle用于标准文件描述符的a,因此Handle可以同时给出stdout和stderr.但是,Handle参数必须在调用之前已经存在.如果没有能力Handle在调用函数之前创建一个稀薄的空气,我不确定问题是否可以通过这种方式解决.
编辑:无论平台如何,解决方案都需要工作.
从这里:
import GHC.IO.Handle -- yes, it's GHC-specific
import System.IO
main = do
stdout_excl <- hDuplicate stdout
hDuplicateTo stderr stdout -- redirect stdout to stderr
putStrLn "Hello stderr" -- will print to stderr
hPutStrLn stdout_excl "Hello stdout" -- prints to stdout
Run Code Online (Sandbox Code Playgroud)