我在这样的子运行tcpdump
后:入门从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'和'-'相同,等等。 –
没错,这将是正确的答案:)谢谢! –