Python использует STDIN в дочернем процессе

Итак, у меня есть программа, в "основном" процессе я запускаю новый объект Process, который (то, что я хочу) должен читать строки из STDIN и добавлять их в объект Queue. .

По сути, базовая настройка системы заключается в том, что существует процесс «получения команд», в который пользователь будет вводить команды / запросы, и мне нужно передать эти запросы другим подсистемам, работающим в отдельных процессах. Я думаю о том, чтобы поделиться ими через многопроцессорную очередь, из которой другие системы могут читать.

То, что у меня есть (сосредоточившись только на получении команд / запросов), в основном:

def sub_proc(q):
    some_str = ""
    while True:
        some_str = raw_input("> ")
        if some_str.lower() == "quit":
            return
        q.put_nowait(some_str)

if __name__ == "__main__":
    q = Queue()
    qproc = Process(target=sub_proc, args=(q,))
    qproc.start()
    qproc.join()

    # now at this point q should contain all the strings entered by the user

Проблема в том, что я получаю:

Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/home/blah/blah/blah/blah.py", line 325, in sub_proc
    some_str = raw_input("> ")
  File "/randompathhere/eclipse/plugins/org.python.pydev_2.1.0.2011052613/PySrc/pydev_sitecustomize/sitecustomize.py", line 181, in raw_input
    ret = original_raw_input(prompt)
EOFError: EOF when reading a line

Как сделать?

5
задан Adam Parkin 21 September 2011 в 18:09
поделиться