我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()
orcommunicate()
在终止之前,我的脚本只会坐在那里继续阅读,等待tcpdump
完成(它不会)。
有没有办法做到这一点(最好没有循环)?