[Haskell-cafe] Re: ANN: HSH 1.2.0
Simon Marlow
simonmarhaskell at gmail.com
Tue Mar 6 06:26:18 EST 2007
John Goerzen wrote:
> On Mon, Mar 05, 2007 at 01:30:23PM +0000, Simon Marlow wrote:
>>> I don't know how Windows shells deal with piping, or even if they
>>> can. All I know is that DOS used to simulate it with temporary files,
>>> lacking any real multitasking.
>> Windows has proper pipes these days, and
>> System.Process.runInteractiveProcess creates pipes for you.
>
> But it is not suitable for this purpose. It returns Handles, but it
> doesn't let me specify Handles going in. That means that it is not
> possible to create a pipe going directly from program A to program B.
You certainly can pipe directly from one process to another:
------
import System.Process
main = do
(hin,hout,herr,p1) <- runInteractiveCommand "cat pipe.hs"
p2 <- runProcess "tr" ["A-Z","a-z"] Nothing Nothing
(Just hout) Nothing Nothing
waitForProcess p1 >>= print
waitForProcess p2 >>= print
-------
However, I'll accept that there are certain arrangements of pipes that aren't
possible, or will construct too many pipes and you'll need extra threads to
connect them together, because the only way to create pipes is with
runInteractive* and that creates pipes for all of stdin/stdout/stderr.
Of course we're open to suggestions for improving System.Process. Perhaps there
should be a version that lets you specify a Handle *or* create a pipe, for each
standard file descriptor.
Cheers,
Simon
More information about the Haskell-Cafe
mailing list