2012-06-01 6 views
1

Здравствуйте, я действительно новичок в языке программирования Python, и я столкнулся с проблемой написания одного сценария. Я хочу сохранить вывод из stdout, который я получаю, когда я запускаю команду tcpdump в переменной в сценарии Python, но я хочу, чтобы команда tpcdump запускалась непрерывно, потому что я хочу собрать длину из всех переданных пакетов, которые фильтруются tcpdump (с фильтром, который я написал). Я пробовал:Как читать вывод stdout текущего процесса в Python?

fin, fout = os.popen4(comand) 
    result = fout.read() 
    return result 

Но это как раз висит.

ответ

3

Я предполагаю, что он висит, потому что os.popen4 не возвращается, пока дочерний процесс не завершится. Вместо этого вы должны использовать subprocess.Popen.

import subprocess 
import shlex #just so you don't need break "comand" into a list yourself ;) 

p=subprocess.Popen(shlex.split(comand),stdout=subprocess.PIPE) 
first_line_of_output=p.stdout.readline() 
second_line_of_output=p.stdout.readline() 
... 
+0

спасибо. Это сработало. Сначала я попытался из командной строки, и он, похоже, не работал, но когда я написал сценарий, он это сделал. Также спасибо за оперативность :) – primero