Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2006 20:15:48

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Считать построчно вывод из pipe

Если ты его используешь тогда не пойму в чем проблема. Отправь ей строку ввода(write()) когда она ее ожидает, а потом считывай ответ.



Офлайн

#2 Дек. 18, 2006 14:15:50

archy
От:
Зарегистрирован: 2006-12-16
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Считать построчно вывод из pipe

проблема в том что я не знаю когда она ожидает ввода, точнее когда точно заклончится ее ответ - скажем что-то вывелось я начинаю считывать как только считывание доходит до конца т.е. текст вывода кончается и пытается считать уже пустую строку куда Октавия ожидает ввода то происходит блокировка - решение либо таймаут либо перед считыванием просто вводить свою последовательность символов(типа как признак конца строки) и когда при считывании доходит до нее прекращать считывание - но я думал может есть какой более изящный способ возможно есть штатные средства для такой ситуации



Офлайн

#3 Янв. 13, 2007 16:26:15

cleg
От:
Зарегистрирован: 2006-11-09
Сообщения: 153
Репутация: +  0  -
Профиль   Отправить e-mail  

Считать построчно вывод из pipe

а под винду есть аналоги expect-а и иже с ним?



Офлайн

#4 Авг. 18, 2010 13:14:40

yahan
От:
Зарегистрирован: 2010-08-18
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Считать построчно вывод из pipe

koder
1)Под какой ОС ты это делаеш - если под линукс, то все должно получатся
- там размер буфера pipe 4к - просто ситема может ждать определенного уровня заполнения буфера.
Что-бы совсем все номано было нужно размер буфера этому  pipe выставить маленьким.
А как можно размер буфера pipe установить в минимальное значение?
Хочу сделать обработку вывода tcpdump и вывод результатов в наглядном виде. Беда в том, что когда в tcpdump задаешь фильтр, который отбирает мало пакетов, то задержки получаются очень существенные.
В идеале надо, чтобы строчка сформированная tcpdump-ом обрабатывалась сразу.
import subprocess

cmd='echo YOUPASSWORD|sudo -S tcpdump -qnippp0 greater 1200'
p=subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
for str in p.stdout: print str
Отвечу сам себе - похоже, что pexpect единственное, что позволяет работать с выводом внешнего процесса в реалтайме. Вот, переписаный кусок предыдущего кода под pexpect:
import pexpect

cmd='sudo -S tcpdump -qnippp0 greater 1200'

child = pexpect.spawn (cmd)
child.expect (':')
child.sendline ('YOUPASSWORD')

while True:
child.expect ('\n')
print child.before



Отредактировано (Авг. 18, 2010 13:39:50)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version