我有一个系统需要从几个不同的进程接收输入。最简单的只是用户手动输入数据的命令行。这些数据将被添加到multiprocessing.Queue
并稍后由主进程处理,但我甚至没有那么远;在进程内调用raw_input
似乎不起作用。我拿出了代码的内容,这是一个例子:
import multiprocessing
def f():
while True:
raw_input('>>>')
p = multiprocessing.Process(target = f)
p.start()
这个简单的代码抛出了这个:
~$ python test.py
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 5, in f
raw_input('>>>')
EOFError: EOF when reading a line
>>>~$
如何在Python中的进程中获取命令行输入?
答案 0 :(得分:10)
当您在Python中生成线程时,it closes stdin。您不能使用子流程来收集标准输入。使用主线程来收集输入,并从主线程将它们发布到Queue。可以将stdin传递给另一个线程,但您可能需要在主线程中关闭它。
答案 1 :(得分:2)
我能够通过使用fdopen()在子进程中重新打开stdin来解决这个问题。 See this answer。它似乎有效,我不知道是否存在隐患。