/ / Python команден ред вход в процес - python, multiprocessing

Въвеждане на командния ред на Python в процес - python, multiprocessing

Имам система, която трябва да получи вход от няколко различни процеса. Най-простият е само команден ред, където потребителят въвежда данни ръчно. Тези данни ще бъдат добавени към 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?

Отговори:

9 за отговор № 1

Когато създадете нишка в Python, тя затваря stdin, Не можете да използвате подпроцес за събиране на стандартвход. Използвайте основната нишка, за да съберете входа и да ги изпратите в опашката от основната нишка. Може да е възможно да се прехвърли stdin на друга нишка, но най-вероятно трябва да я затворите в основната си тема.


2 за отговор № 2

Успях да заобиколя това като използвах fdopen (), за да отворя stdin в подпроцеса. Вижте този отговор, Изглежда, че работи, не знам дали има някакви скрити рискове.