Вопрос

Я хочу сделать Popen () / Python's subprocess.communicate от haskell - запустить программу, дайте ему stdin и получить свой stdout / stderr. Какой самый прямой / хэскеллический способ сделать это?

Это было полезно?

Решение

Выберите тоже ПропавшийS. 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

Другие советы

Другим вариантом может быть использование Шелли упаковка

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top