最接近于Haskell中的subprocess.communicate

时间:2009-11-11 01:04:06

标签: haskell executable pipe subprocess popen

我想从Haskell做一个popen()/ python的subprocess.communicate - 启动一个程序,给它stdin,并得到它的stdout / stderr。什么是最直接/最朴素的方式?

2 个答案:

答案 0 :(得分:12)

选择MissingHSystem.Cmd.Utils和标准库的System.Process。它们易于使用,具有高级便利功能(您只需将字符串抛出并获取字符串,可能是懒惰)和低级管道功能(实际上为您提供句柄,就像大多数popen函数一样在其他语言/框架中。)

import System.Process

main = do
    let cmd = "mail"
        args = ["root@localhost", "-s", "does this act like popen?"]
        input = ["Hello, world!"]
    (rc, out, err) <- readProcessWithExitCode cmd args input
    putStrLn $ "mail exited: " ++ show rc
    mapM_ putStrLn $ map ("out: " ++) $ lines out
    mapM_ putStrLn $ map ("err: " ++) $ lines err

答案 1 :(得分:0)

另一种选择可能是使用shelly