Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 18, 2010 20:12:34

test157
От:
Зарегистрирован: 2009-02-25
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Динамическое получение данных от внешней программы запущенной из Popen

всем привет

пускаю внешнюю программку через Popen, которая постепенно выводит данные в stdout но в питоне эти данные я получаю только после того как их накопится большое количество, а мне нужно сразу - как только хоть что то пришло.

т.е. вот пример:

out = open('stdout.txt', 'w', 0)
p2 = Popen(["some.exe or some.py", ""], bufsize=0, stdout=out)
но данные в файл stdout.txt не падают сразу, а только после окончания выполнения программы. как это побороть?

P.S.: пишу в файл, т.к. мне нужно асхинхронное выполнение внешнего приложения. т.е. оно там бегает, а я иногда проверяю не пришли ли данные - т.е. не накидало ли это приложения что в “консоль”, Popen.communicate не подходит, т.к. он ждет окончания выполнения приложения. если есть более правильный вариант для этого то было бы супер.



Отредактировано (Янв. 18, 2010 20:13:25)

Офлайн

#2 Янв. 19, 2010 04:38:27

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Динамическое получение данных от внешней программы запущенной из Popen

А вы откройте Popen.communicate и посмотрите, как оно работает.
Простыня длинная, конечно (если брать вместе с ._communicate) - но читаемая.
В вашем случае затык происходит на stdout_thread.join()
Дальше думайте, как именно вам нужно работать с .stdout



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version