Форум сайта python.su
Всем привет.
Не могу разобраться в том, как получать данные из дочернего процесса с помощью 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()
# -*- coding: UTF-8 -*- from subprocess import Popen, PIPE out, err = Popen("C:\\Python27\\python.exe test2.py", shell=True, stdout=PIPE).communicate() print out
Отредактировано nmh (Сен. 23, 2013 13:07:36)
Офлайн
Все заработало, как надо, когда я добавил аргумент -u.
reactor.spawnProcess(test2Protocol(),"C:\\Python27\\python.exe",["-u","test2.py"])
Офлайн
Аргументы должны включать название программы:
reactor.spawnProcess(test2Protocol(),"C:\\Python27\\python.exe",["C:\\Python27\\python.exe", "test2.py"])
Офлайн