[Haskell-cafe] "piping" to system call

Janis Voigtlaender voigt at tcs.inf.tu-dresden.de
Tue Sep 23 09:12:18 EDT 2008


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.

Ciao, Janis.

-- 
Dr. Janis Voigtlaender
http://wwwtcs.inf.tu-dresden.de/~voigt/
mailto:voigt at tcs.inf.tu-dresden.de




More information about the Haskell-Cafe mailing list