Python进程中的命令行输入

ker*_*ger 12 python multiprocessing

我有一个系统需要从几个不同的进程接收输入.最简单的只是用户手动输入数据的命令行.这些数据将被添加到multiprocessing.Queue主要过程的后期处理中,但我甚至没有那么远; raw_input在进程内调用似乎不起作用.我拿出了代码的内容,这是一个例子:

import multiprocessing

def f():
    while True:
        raw_input('>>>')

p = multiprocessing.Process(target = f)
p.start()
Run Code Online (Sandbox Code Playgroud)

这个简单的代码抛出了这个:

~$ 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
>>>~$
Run Code Online (Sandbox Code Playgroud)

如何在Python中的进程中获取命令行输入?

Car*_* F. 13

当你在Python中生成一个线程时,它会关闭stdin.您不能使用子流程来收集标准输入.使用主线程来收集输入,并从主线程将它们发布到Queue.有可能将stdin传递给另一个线程,但您可能需要在主线程中关闭它.


ASh*_*lly 5

我能够通过使用 fdopen() 在子进程中重新打开 stdin 来解决这个问题。 看到这个答案。好像可以用,不知道有没有什么隐患。