Получение stdout из подпроцесса tcpdump после его завершения

Я запускаю tcpdump в подпроцесс вроде этого:

pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'], 
                                  stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Аргумент -w - важен: он сообщает tcpdump , что нужно распечатать полученный файл .pcap в stdout .

I затем перейдите на веб-сайт, используя urllib.open () . После этого я хотел бы убить tcpdump и поместить все, что он напечатал, в строку. Я пробовал следующее:

pcap_process.terminate()
result = pcap_process.stdout.read()    # or readline(), etc.

Но (если я не делаю что-то не так), это не работает; Убил процесс, теперь читать нечего. Если я использую read () или communication () перед завершением, мой скрипт просто будет сидеть и читать, ожидая завершения tcpdump (что не будет).

Есть ли способ сделать это (желательно без циклов)?

7
задан Nakilon 25 April 2013 в 11:42
поделиться