gpt4 book ai didi

haskell - Haskell 中的交互式进程通信

转载 作者:行者123 更新时间:2023-12-04 00:38:05 25 4
gpt4 key购买 nike

我正在尝试编写一个执行交互式程序(也是用 Haskell 编写)的 Haskell 程序,发送和接收文本行。交互式程序使用标准 Haskell 库从 stdIn 读取并写入 stdOut。

然而,事实证明这比我预期的要复杂,可能是由于 Haskell 的惰性或后台发生的其他一些神秘事件。该程序显然陷入了僵局,并且没有收到它预期收到的文本行。如果交互式程序因发送文本行而终止,它确实可以很好地接收文本,但我需要程序继续运行并接收更多数据(出于某种原因将其称为交互式)。有时,只有在我终止接收消息的程序后,它才会打印预期的输出。代码如下所示:

main = do
(hin,hout,herr,pl) <- (runInteractiveCommand "./PlayerMain")
hSetBinaryMode hin False
hSetBinaryMode hout False
hSetBuffering hin LineBuffering
hSetBuffering hout NoBuffering
hPutStr hin "start\n"
out <- hGetLine hout
putStrLn out

我已经尝试用严格的 Data.Text 替换惰性字符串,但行为是一样的。有灯吗?

最佳答案

可能是 ./PlayerMain 的输出被缓冲了。 ./PlayerMain 写入了一些没有立即刷新的内容,然后挂起,因为它一直在等待更多输入。

这可以解释为什么您确实在程序终止时收到消息。

因此,如果您修改 ./PlayerMain 并将其 stdout 设置为 NoBuffering,它也许会起作用。

关于haskell - Haskell 中的交互式进程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22580260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com