我正在尝试创建一个进程,并通过我在外部提供的句柄与其进行通信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
The "someproc"
进程将一行输出到标准输出,我想从生成它的进程中读取它。但是,如果我尝试这样做,我会收到以下错误:
hGetLine:非法操作(句柄关闭)
我不明白的是为什么在创建的进程运行时句柄被关闭。如果我使用的话这有效CreatePipe
代替UseHandle
,问题是我只想读第一行。但是这样做需要继续从管道中读取,否则在输出一定量后它就会满"someproc"
.
那么,有没有办法使用system.process
通过以下方式通信两个进程stdOutH
按照上面描述的方式?
这种行为的createProcess
is 有记录的 https://hackage.haskell.org/package/process-1.6.2.0/docs/System-Process.html#v:createProcess:
请注意,通过 UseHandle 构造函数为 std in、stdout 或 stderr 提供的句柄将通过调用此函数来关闭。
文档建议使用createProcess_
函数代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)