How does one run a system command in Haskell and bind it\'s result (i.e., standard output) to a variable? In pseudo-haskell I\'m looking for something like the
Expanding on jamshidh's answer, if instead of getting stdout and stderr as String
you want to get them as ByteString
or Text
, you can use the process-extras package.
You can also use my process-streaming package:
$ import System.Process.Streaming
$ execute (piped (shell "echo foo")) (liftA3 (,,) (foldOut intoLazyBytes)
(foldErr intoLazyBytes)
exitCode)
("foo\n","",ExitSuccess)
Also for Text
:
$ import System.Process.Streaming.Text
$ execute (piped (shell "echo foo")) (liftA3 (,,) (foldOut (transduce1 utf8x intoLazyText))
(foldErr (transduce1 utf8x intoLazyText))
exitCode)
("foo\n","",ExitSuccess)