【发布时间】:2015-03-20 10:38:12
【问题描述】:
场景:PCAP 用BZIP2 压缩的文件,我想用tcpdump 解析并在 Python 2.7 中逐行列出结果。以下是我的想法:
def tcpdump(filename):
import subprocess
import bz2
p = subprocess.Popen(
('tcpdump', '-lnr', '-s', '0', '-'),
stdin=bz2.BZ2File(filename),
stdout=subprocess.PIPE)
try:
for row in p.stdout:
yield row.rstrip()
except KeyboardInterrupt:
p.terminate()
这样做的问题是Popen 的stdin 参数需要一个实际的文件句柄并抛出此异常:
AttributeError: 'bz2.BZ2File' 对象没有属性 'fileno'
我可以轻松地将其设为两步过程,但我想避免使用中间临时文件。
想法或建议?
【问题讨论】:
-
除了 bzip2 问题之外,
Popen(('tcpdump', '-l -n -s 0 -r -'))与tcpdump "-l -n -s 0 -r -"相同,在命令行上也不起作用;你不能在一个大的单一参数中传递所有不相关的选项。 -
@CharlesDuffy 谢谢——修复!
标签: python python-2.7 popen bzip2