Twisted Python: не удается выполнить запись в запущенный порожденный процесс

Мой вопрос заключается в том, что после нереста процесса дочерний процесс зацикливается, чтобы получить данные со своего stdin. Я хотел бы написать ему новые данные, используя либо Echo.Process.pipes [0] .write (data), либо Echo.Process.writeToChild (0, data), но оба они не работают. Кто-нибудь объяснит, что происходит? Или как мне обойти эту проблему?

Это ошибка, которую я получил:

--- <exception caught here> --- File "/usr/local/encap/python-2.6.4/lib/python2.6/site-packages/Twisted-9.0.0-py2.6-linux-x86_64.egg/twisted/internet/selectreactor.py", line 146, in _doReadOrWrite why = getattr(selectable, method)() File "/usr/local/encap/python-2.6.4/lib/python2.6/site-packages/Twisted-9.0.0-py2.6-linux-x86_64.egg/twisted/internet/tcp.py", line 460, in doRead return self.protocol.dataReceived(data) File "pp1.py", line 30, in dataReceived Echo.Process.pipes[0].write(data) exceptions.KeyError: 0 

Спасибо,

Q

 from sys import executable from os import environ import os from twisted.internet import reactor from twisted.internet.protocol import Protocol from twisted.internet.protocol import Factory from twisted.internet import protocol import sys implementation = """\ import os import time import sys print "in child", os.getpid() while (True): a = raw_input("") if a: print a """ class Echo(Protocol): Process = None def dataReceived(self, data): if Echo.Process == None: pp = MyPP() Echo.Process = reactor.spawnProcess(pp, executable, [executable, "-c", implementation, data], env=environ, childFDs = {0:1, 1:1, 2:2}) else: Echo.Process.pipes[0].write(data) #Echo.Process.writeToChild(0,data) self.transport.write(data) class EchoFactory(Factory): def buildProtocol(self, addr): return Echo() class MyPP(protocol.ProcessProtocol): def connectionMade(self): print "connectionMade!" def outReceived(self, data): print "out" def errReceived(self, data): print "error", data def processExited(self, reason): print "processExited" def processEnded(self, reason): print "processEnded" print "quitting" reactor.listenTCP(8200, EchoFactory()) print 'in parent', os.getpid() reactor.run() 

  • используя django и скрученный вместе
  • скрученный конвертер
  • Очистка ресурсов с помощью SMTP-модуля Twisted Python
  • Twisted and Websockets: Beyond Echo
  • Python Twisted JSON RPC
  • ImportError с cx_Freeze и pyinstaller
  • Используя классы Twisted.web Twisted, как очистить мои исходящие буферы?
  • Twisted, MySQLdb и (2006, «сервер MySQL ушел») с помощью Twisted adbapi
  • 2 Solutions collect form web for “Twisted Python: не удается выполнить запись в запущенный порожденный процесс”

    Чтобы создать новый процесс для каждого входящего соединения и перенаправить все входные данные в процесс 'stdin:

     #!/usr/bin/python from twisted.internet import reactor from twisted.internet import protocol class Echo(protocol.Protocol): def connectionMade(self): self.pp = MyPP() reactor.spawnProcess(self.pp, 'cat', ['cat']) def dataReceived(self, data): self.pp.transport.write(data) def connectionLost(self, reason): self.pp.transport.loseConnection() class MyPP(protocol.ProcessProtocol): def connectionMade(self): print "connectionMade!" def outReceived(self, data): print "out", data, def errReceived(self, data): print "error", data, def processExited(self, reason): print "processExited" def processEnded(self, reason): print "processEnded" print "quitting" factory = protocol.Factory() factory.protocol = Echo reactor.listenTCP(8200, factory) reactor.run() 

    Не передавайте childFDs в spawnProcess и не используйте атрибут pipes результирующего объекта транспорта процесса. Ни одна из этих вещей не делает то, что вы думаете. Если вы childFDs от использования childFDs и вернетесь к writeToChild , вы получите writeToChild поведение.

    Interesting Posts

    Изменить имя процесса скрипта Python

    Python: ImportError: /usr/local/lib/python2.7/lib-dynload/_io.so: undefined symbol: PyUnicodeUCS2_Replace

    Python: несколько вызовов __init __ () в одном экземпляре

    Передача функций, которые имеют несколько возвращаемых значений в качестве аргументов в Python

    Создание тепловой карты с использованием трехмерных данных в matplotlib

    Как многопоточные чтения словарей из списка и ввода в базу данных

    Проблема Python timedelta с отрицательными значениями

    Можно ли использовать cStringIO так же, как StringIO?

    Использование OpenCV detectMultiScale для поиска моего лица

    Скопировать-вставить в Python интерактивный интерпретатор и отступы

    python newbie: импорт модуля numpy в eclipse

    Написание веб-сайта в Python

    Как загрузить все записи в бесконечном прокрутке сразу, чтобы проанализировать HTML в python

    Django – Как включить аннотированные результаты в сериализованном QuerySet?

    ImportError при импорте из sklearn: невозможно импортировать имя check_build

    Python - лучший язык программирования в мире.