【发布时间】:2017-11-01 11:28:54
【问题描述】:
我正在尝试创建一个进程,并通过我在createProcess 函数之外提供的句柄与它通信:
stdOutH <- openFile (logDir </> "stdout.log") ReadWriteMode
hSetBuffering stdOutH LineBuffering
(_, _, _, ph) <- createProcess $
(proc "someproc" []) { std_out = UseHandle stdOutH
, std_err = UseHandle stdErrH
}
line <- hGetLine stdOutH
putStrLn $ "Got " ++ line
"someproc" 进程向标准输出吐出一行,我想从产生它的进程中读取它。但是,如果我尝试这样做,我会收到以下错误:
hGetLine:非法操作(句柄已关闭)
我不明白为什么在创建的进程运行时关闭句柄。如果我使用CreatePipe 而不是UseHandle,这可行,问题是我只想阅读第一行。但是这样做需要继续从管道中读取,否则在"someproc"输出一定量后它就会满了。
那么,有没有办法使用system.process 以上述方式通过stdOutH 与两个进程通信?
【问题讨论】:
-
清除不打算再次使用的管道,可以使用
forkIO (forever (hGetChar pipeHandle))。 -
这或多或少是我最终做的......