我正在尝试创建一个进程,并通过我在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
传递两个进程? 最佳答案
createProcess
的这种行为是documented:
请注意,通过以下方式为std_in,std_out或std_err提供了句柄
调用此函数将关闭UseHandle构造函数。
文档建议改为使用createProcess_
函数。