我想从 Haskell 做一个 popen() / python 的 subprocess.communicate - 启动一个程序,给它 stdin,然后得到它的 stdout/stderr。最直接/ Haskellish的方法是什么?
问问题
1255 次
2 回答
12
选择MissingH和System.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
于 2009-11-11T01:29:57.127 回答
0
另一种选择可能是使用shelly包
于 2013-12-04T19:17:07.430 回答