Haskell创建进程和从句柄中读取

4

当我使用Haskell的createProcess时,是否需要像在C语言中使用exec一样先进行fork操作?

从我看到的示例和我尝试过的情况来看,我不认为需要。但是如果我从输出Handle读取一次,我可以得到期望的结果,但是如果我尝试读取两次,则无法读取任何内容。

例如:

beginProcess与createProcess相同,z3是一个从stdin读取并写入stdout的SMT求解器。

execute :: Process -> String -> IO String
execute (Just std_in, Just std_out,_,_) cmd = do
  hPutStr std_in cmd 
  hFlush std_in
  hGetLine std_out

main :: IO()
main = do 
  proc <- beginProcess "z3" ["-smt2","-in"]
  execute proc "(set-option :print-success true)" >>= print
  execute proc "(set-option :print-success true)" >>= print 

如果我执行一个操作,我会得到预期的结果,但如果我执行两个操作,什么也不会发生。我是读取还是写入句柄有误吗?
非常感谢您能提供的任何帮助。

1
请展示你的导入。特别是,beginProcess是什么?我在hoogle或hayoo上找不到它。 - ErikR
2
process库非常依赖于系统,因此您应该包含您使用的平台信息。 - user2407038
1个回答

5

我忘了加换行符 xD。现在它可以工作了,而且我之前不知道伪终端,所以感谢你的回答。 - Rogerp062

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接