【发布时间】:2011-03-17 03:41:39
【问题描述】:
我正在尝试使两个进程使用管道进行通信。 我在父进程中这样做了:
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... 不幸的是,它仍然挂起,没有打印任何内容。将无限循环替换为休眠 5 秒会使父进程空闲 5 秒,然后打印 16。 这说明父进程只有在终止执行后才从子进程获取输出。
我想知道是否可以在程序完成之前获得输入。 我的想法是通过这个管道传递信息,获取输入,处理它,并在管道中输出结果,以便另一个可以继续处理。
有什么帮助吗? 谢谢,
曼努埃尔
【问题讨论】:
-
写
"4\n"的时候有没有试过刷流? -
是的,这不是问题。子进程实际上得到了 4,我已经看到了,因为在读取该输入之后,我将其写入常规文件,然后进入无限循环。父进程是在 read() 部分中阻塞的那个。
-
出于好奇,为什么不在子进程中使用
sys.stdin.readline()? -
不知道,我总是用它来读取标准输入的输入...我不知道有什么区别,对吗?
-
@Manuel:
raw_input更面向交互式使用,Python3 中也缺少它。结果应该是一样的。
标签: python pipe stdout stdin multiprocessing