Ближайший эквивалент subprocess.communicate в Haskell - PullRequest
1 голос
/ 11 ноября 2009

Я хочу сделать popen () / python subprocess.communicate из Haskell - запустить программу, передать ей stdin и получить ее stdout / stderr. Какой самый прямой / Haskellish способ сделать это?

Ответы [ 2 ]

12 голосов
/ 11 ноября 2009

Выберите либо 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
0 голосов
/ 04 декабря 2013

Другой вариант - использовать шелли пакет

...