Не могу разобраться в том, как получать данные из дочернего процесса с помощью Twisted (в том случае, если дочерним процессом является другой python-скрипт).
При этом через popen все работает.
Неработающий пример:
Скрипт 1:
# -*- coding: UTF-8 -*- from twisted.internet import reactor,protocol def runtest2(): class test2Protocol(protocol.ProcessProtocol): def connectionMade(self): print u"Запущен процесс test2" def outReceived(self,data): print u"Получены данные %s" % data def processEnded(self,reason): print u"Процесс импорта данных был непредвиденно завершен." reactor.spawnProcess(test2Protocol(),"C:\\Python27\\python.exe",["test2.py"]) if __name__ == "__main__": reactor.callWhenRunning(runtest2) reactor.run()
# -*- coding: UTF-8 -*- from twisted.internet import reactor import os,sys sys.stdout.flush() def main(): print "test" sys.stdout.write("test1\n") os.write(1,"test2") main()
Работающий пример скрипта №1:
# -*- coding: UTF-8 -*- from subprocess import Popen, PIPE out, err = Popen("C:\\Python27\\python.exe test2.py", shell=True, stdout=PIPE).communicate() print out
Проблема в том, что мне хотелось бы использовать имено twisted, т.к. необходимо мониторить выхлоп второго скрипта в течение довольно продолжительного времени (ну и в программе я использую много других возможностей twisted).
Платформа windows 8, питон 2.7
П.С. Забыл упомянуть одну вещь. Если субпроцессом является какая-либо сторонняя программа, то все работает и все сообщения перехватываются, проблема только, если в дочернем процессе запускается python.