Here is a version that works fine:

myRawSystem cmd args = do 
    (inP, outP, errP, pid) <- runInteractiveProcess cmd args Nothing Nothing
    hClose inP
    os <- pGetContents outP
    es <- pGetContents errP
    ec <- waitForProcess pid
    case ec of
      ExitSuccess   -> return ()
      ExitFailure e ->
          do hPutStrLn stderr ("Running process "++unwords (cmd:args)++" FAILED 
("++show e++")")
             hPutStrLn stderr os
             hPutStrLn stderr es
             hPutStrLn stderr ("Raising error...")
             fail "Running external command failed"

pGetContents h = do
    mv <- newEmptyMVar
    let put [] = putMVar mv []
        put xs = last xs `seq` putMVar mv xs
    forkIO (hGetContents h >>= put)
    takeMVar mv

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to