Я запускаю tcpdump
в таком подпроцессе:
pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Аргумент -w -
важен: он указывает tcpdump
напечатать полученный файл .pcap на stdout
.
Затем я перехожу к веб-сайту, используя urllib.open()
. После того, как это будет сделано, я хотел бы убить tcpdump
и поместить все, что он напечатал, в строку. Я пробовал следующее:
pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.
Но (если я не делаю что-то не так) это не работает; Убил процесс, теперь читать нечего. Если я использую read()
или communicate()
перед завершением, мой скрипт просто будет сидеть и читать снова и снова, ожидая завершения tcpdump
(а этого не произойдет).
Есть ли способ сделать это (желательно без циклов)?
tcpdump
отдельно:Popen(['tcpdump', '-s', '0', '-w', '-', 'tcp'], ...)
. Единственный аргумент-w -
не интерпретируется так же, как два аргумента-w
и-
и т. д. - person Adam Rosenfield   schedule 23.08.2011