Je veux faire un subprocess.communicate de popen()/python de Haskell - démarrer un programme, lui donner stdin, et obtenir son stdout/stderr. Quelle est la façon la plus directe/Haskellish de le faire?Le plus proche équivalent à subprocess.communicate dans Haskell
1
A
Répondre
12
Sélectionnez MissingHSystem.Cmd.Utils
et la bibliothèque standard System.Process. Ils sont faciles à utiliser, avec des fonctions de commodité de haut niveau (que vous lancez simplement des chaînes et récupérez des chaînes, peut-être paresseusement) et des fonctions de plomberie de bas niveau (qui vous donnent des poignées, comme la plupart des autres langues/cadres).
import System.Process
main = do
let cmd = "mail"
args = ["[email protected]", "-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
L'autre option pourrait être d'utiliser shelly package
Oops, 'input' devrait être un' 'CHAINE' pas [chaîne]'. Eh bien, vous avez l'idée :) – ephemient
Vous pouvez éditer votre message, vous savez ... :) – porges