Найти - Пользователи
Полная версия: twisted, ProcessProtocol, stdout
Начало » Python для новичков » twisted, ProcessProtocol, stdout
1
nmh
Всем привет.
Не могу разобраться в том, как получать данные из дочернего процесса с помощью 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()
Скрипт 2:
# -*- 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.
nmh
Все заработало, как надо, когда я добавил аргумент -u.
reactor.spawnProcess(test2Protocol(),"C:\\Python27\\python.exe",["-u","test2.py"])
agalen
Аргументы должны включать название программы:
reactor.spawnProcess(test2Protocol(),"C:\\Python27\\python.exe",["C:\\Python27\\python.exe", "test2.py"])
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB