[Haskell-cafe] "piping" to system call

Jules Bean jules at jellybean.co.uk
Tue Sep 23 09:02:18 EDT 2008


Marc Weber wrote:
> On Tue, Sep 23, 2008 at 01:37:56PM +0200, Janis Voigtlaender wrote:
>>  Hi,
>>
>>  assume I have a program taking input from stdin. How do I call it from
>>  Haskell while feeding to it a string as input.
> 
> Sure, have a look at 
> http://hackage.haskell.org/packages/archive/process/1.0.0.0/doc/html/System-Process.html#v:runInteractiveProcess
> 
>         rnuInteractiveCommand does would you want
>         (in,out,err,pId) <- runInteractiveProcess "cat" ...
>         hPutStrLn "test" in
>         hClose in
>         outContents <- hGetContents out
>         print outContents

Beware. The above code is broken.

Whether it appears to work depends on your OS, buffering settings, and 
the size of any underlying buffers.

The simplest safe way to do this is to fork a separate thread for one 
side or the other of the handle.

Jules


More information about the Haskell-Cafe mailing list