我有一个Python脚本来捕获网络流量tcpdump
in a subprocess
:
p = subprocess.Popen(['tcpdump', '-I', '-i', 'en1',
'-w', 'cap.pcap'], stdout=subprocess.PIPE)
time.sleep(10)
p.kill()
当这个脚本完成其工作时,我尝试打开输出.pcap
文件在 Wireshark 中并得到这个error:
“捕获文件似乎在数据包的中间被缩短了。”
可以采用什么解决方案来“正确”关闭tcpdump
's subprocess
?
代替p.kill()
, 您可以使用p.send_signal(subprocess.signal.SIGTERM)
发送终止信号而不是终止信号(p.terminate()
做同样的事)。
The 公开文档 https://docs.python.org/2/library/subprocess.html#popen-objects描述send_signal()
命令。关于信号的文档有点弱,但是 dir(subprocess.signal) 将列出您可能发送到进程的所有信号,但终止应该允许它有一些时间来清理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)