我正在尝试在Haskell代码和交互式命令行过程之间建立一个“桥梁”。更具体地说,我正在尝试运行Elm REPL并通过stdin / stdout发送/接收。我不确定要使用哪个库,但是我选择了typed-process
。
我的问题是,我的Haskell程序在REPL进程仍在运行时完成(或退出)。如何避免这种情况?
另外,另一个问题是REPL进程没有从stdin句柄获取任何输入。
我当前的代码如下:
run :: Document -> IO (Result () Text)
run (Document moduleName tests) = do
let config = createConfig
p <- startProcess config
hSetBuffering (getStdin p) NoBuffering
hSetBuffering (getStdout p) NoBuffering
Data.Text.IO.hPutStr (getStdin p) "True\n"
Data.Text.IO.hGetChunk (getStdout p) >>= print
_ <- waitExitCode p
return (Ok ())
{-| Config for process.
-}
createConfig =
shell "elm repl"
|> setStdin createPipe
|> setStdout createPipe
|> setStderr closed
答案 0 :(得分:1)
在文档中,看来stopProcess
迫使进程停止(它在unix上发送SIGTERM)。这是因为文档声明其调用terminateProcess
,然后等待。
我们只想等待而不终止该过程。我会尝试使用waitExitCode
或类似的功能。