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