Сценарий: PCAP
файл сжат с BZIP2
, что я хотел бы проанализировать с tcpdump
и перечислить результаты по строкам, в пределах Python 2.7. Вот что я придумал с верхней части моей головы:Как распаковать BZ2 непосредственно в Popen stdin в 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 Спасибо - исправлено! –