Janis Voigtlaender wrote:
Jules Bean wrote:
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.

Thanks for the warning. I needed it only for a small scripting task, and
it seems to work well enough. Actually, I am not even interested in the
output, so I just went for waitForProcess. This comes with additional
warnings in the docs, but I did not experience any problems in my
concrete setting so far.

If you don't care about the output, it's fine if you send the output to /dev/null.

The deadlock is when you try to read the output and send the input from the same thread.

However if the output is to "out" and you never read it then that *will* deadlock, but probably only when some OS buffer gets full (e.g. after 8k of output)


Jules
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to