gpt4 book ai didi

python - 通过管道制作 python 程序 "chat"

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:15 26 4
gpt4 key购买 nike

我试图让两个进程使用管道进行通信。我在父进程中这样做:

process = subprocess.Popen(test, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)

process.stdin.write("4\n");
output = process.stdout.read()
print output

在子进程中:

inp = raw_input()
integer = int(inp)
print integer**2
while(True):
pass

我希望父进程打印 16... 不幸的是,它仍然挂起而没有打印任何东西。用 sleep 5 秒代替无限循环会使父进程空闲 5 秒,然后打印 16。这表明父进程在终止执行后才从子进程获取输出。

我想知道是否有可能在程序完成之前获得输入。我的想法是通过这个管道传递信息,获取输入,处理它,然后在管道中输出结果,以便另一个可以继续处理。

有什么帮助吗?谢谢,

曼纽尔

最佳答案

我看到了一些可能的问题:

a) 子进程实际上从不刷新它的输出,因此从不真正将它的输出发送给父进程。

b) 在子进程实际发送其输出(刷新其输出)之前,父进程运行其 read() 调用。

c) 父进程执行阻塞 read() 直到 EOF,这实际上意味着它等待子进程退出。 subprocess.Popen 文档应该提到这是否可能是这种情况。

d) 父进程的 read() 调用在返回之前等待一定数量的字节(例如 1024)到达。

可能让父级执行大量 read(1) 调用并在字节传入时重新组装它们将解决此问题。或者使用更高级别的通信 API,例如使用数据报而不是解析字节流。

关于python - 通过管道制作 python 程序 "chat",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3268410/

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