[Haskell-cafe] createProcess shutting file handles

Jeremy Shaw jeremy at n-heptane.com
Fri Feb 13 12:49:44 EST 2009


Hello,

As far as I can tell, createProcess is closing the handle:

createProcess
  :: CreateProcess
  -> IO (Maybe Handle, Maybe Handle, Maybe Handle, ProcessHandle)
createProcess cp = do
  r <- runGenProcess_ "runGenProcess" cp Nothing Nothing
  maybeCloseStd (std_in  cp)
  maybeCloseStd (std_out cp)
  maybeCloseStd (std_err cp)
  return r
 where
  maybeCloseStd :: StdStream -> IO ()
  maybeCloseStd (UseHandle hdl)
    | hdl /= stdin && hdl /= stdout && hdl /= stderr = hClose hdl
  maybeCloseStd _ = return ()

I don't see a way around it. 

- jeremy


At Fri, 13 Feb 2009 15:38:32 +0000,
Neil Mitchell wrote:
> 
> Hi,
> 
> I want to run multiple programs and dump the stdout/stderr to a file,
> I've tried doing:
> 
>     h <- openFile file WriteMode
>     let c = CreateProcess (RawCommand file [])
>                           Nothing Nothing
>                           Inherit (UseHandle h) (UseHandle h) False
>     (_,_,_,pid) <- createProcess c
>     waitForProcess pid
>     hPutStrLn h "Test"
> 
> But by the time I get to the hPutStrLn line it says:
> 
> Main: test.log: hPutStr: illegal operation (handle is closed)
> 
> What have I done wrong? Did createProcess close the handle, and is
> there a way round this? This is using GHC 6.10 on Windows with the new
> process-1.0.1.1
> 
> Thanks
> 
> Neil
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe


More information about the Haskell-Cafe mailing list