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