
On Tue, 12 Apr 2005, Dimitry Golubovsky wrote:
Does there exist any analog of popen in the standard Haskell libraries?
I need to execute an external program (not a Haskell funciton) - maybe in a shell, being able to feed something to its stdin, and finally catch the exit code. Does there exist a way to do this without dealing with multithreading, writing my own ffi and other stuff?
Something like rawSystem, but acting asynchronously (returning a writeable pipe handle, and a process ID), and later I would use getProcessStatus to catch the exit code.
PS I have found http://community.moertel.com/ss/space/Tom's+Haskell+code/POpen.hs so far, but it does not seem to be part of the standard library.
True, but it looks like it might show a way to do this without dealing with multithreading, writing your own ffi and other stuff. It sounds like his popenRaw would work for your application. As you probably know, you will need to at least flush output and possibly close the pipe in order to get all output from the child process, because of buffering in the respective processes. Incidentally, if it had been up to me, System.Posix.Process executeFile would have taken the entire argv list [0..n]. [1..n] seems like a gratuitous abridgement to the underlying functionality. Donn Cave, donn@drizzle.com