我正在编写一个运行外部子进程的程序,并且需要在输出句柄可用时将其内容输出到标准输出。我尝试过类似以下的代码:
main = do processInfo <- createProcess (proc "ghci" []){std_out = CreatePipe,
std_in = CreatePipe }
case processInfo of
(Just hIn, Just hOut, _, _) -> do mainloop hIn hOut
hClose hIn
hClose hOut
_ -> do error "Unable to start process"
mainloop :: Handle -> Handle -> IO ()
mainloop inh outh =
do ineof <- hIsEOF outh
if ineof
then return ()
else do inpStr <- hGetLine outh
putStrLn inpStr
mainloop inh outh
但是这种方法不起作用,因为它只逐行识别输出,所以任何没有以换行符结尾的进程输出句柄上的输出都不会显示出来。我已经尝试使用hGetContents进行相同的操作,但结果相同。我已经阅读了System.Process和System.IO的文档,但并没有找到什么确定性的东西。