Я выполняю 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
(чего не будет).
Есть ли способсделать это (желательно без петель)?