Frage

Ich möchte einen Subprozess von popen () / python von haskell machen - starten Sie ein Programm, geben Sie es Stdin und holen Sie sich die Stdout / Stderr. Was ist der direkteste / haskellischste Weg, dies zu tun?

War es hilfreich?

Lösung

Wählen Sie entweder Vermissth's System.Cmd.Utils und die Standardbibliothek System.Process. Sie sind einfach zu bedienen, mit sowohl hohen Komfortfunktionen (die Sie einfach faul sind) als auch die Fäden zurückgewinnen und möglicherweise faul) als auch bei niedrigen Sanitärfunktionen (die Ihnen tatsächlich Griffe geben, wie die meisten popen Funktionen in anderen Sprachen/Frameworks).

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

Andere Tipps

Die andere Option könnte verwendet werden Shelly Paket

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top