Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 19, 2009 14:19:06

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

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

я сейчас запускаю программы/комманды так:

  a = os.popen(command)
for line in a.readlines():
print line
результат возвращается только после завершения работы программы,
как сделать что-б результат получаться по ходу работы программы?

Офлайн

#2 Авг. 19, 2009 14:27:14

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

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

Офлайн

#3 Авг. 19, 2009 15:03:55

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2751
Репутация: +  184  -
Профиль   Отправить e-mail  

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

os.popen2(command) и скорее всего придётся читать данные отдельным потоком.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Авг. 19, 2009 15:42:28

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

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

вот так вот получилось:

import os

con = os.popen("ping 127.0.0.1","r")
while 1:
line = con.readline()
print line.decode('CP866'),
if not line: break

Офлайн

#5 Авг. 20, 2009 08:55:11

.Serj.
От:
Зарегистрирован: 2008-09-27
Сообщения: 181
Репутация: +  0  -
Профиль   Отправить e-mail  

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

вот так вот получилось:
Ещё проще:
import os
os.spawnl(os.P_NOWAIT, "/bin/ping", "", "127.0.0.1", "-c3")
По идее, на винде тоже должно сработать.
Или же ещё проще, через subprocess, как советовал igor.kaist:
import subprocess
subprocess.Popen(["/bin/ping", "127.0.0.1", "-c3"])
Мораль: надо слушать старших и внимательно читать документацию, а не городить собственные велосипеды :)
Кстати, полный путь до исполняемого файла в случае subprocess писать не обязательно.

P.S. всё проверял в ipython.



Отредактировано (Авг. 20, 2009 09:07:23)

Офлайн

#6 Авг. 20, 2009 12:09:25

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

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

.Serj.
Ещё проще:
P.S. всё проверял в ipython.
первый пример не рабочий на питоне26 (винда)

второй стартует но от него нет толку, как получить вывод программы?

Офлайн

#7 Авг. 20, 2009 13:34:55

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

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

o7412369815963

from subprocess import Popen, PIPE
pipe = Popen(["/bin/ping", "127.0.0.1", "-c3"], shell=True, stdout=PIPE).stdout



Отредактировано (Авг. 20, 2009 13:37:15)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version