我正在尝试处理python中的tcpdump输出。
我需要运行tcpdump(捕获数据包并向我提供信息)并读取输出并进行处理。
问题是tcpdump永远保持运行状态,我需要在输出后立即读取数据包信息并继续进行操作。
我尝试调查python的子进程,并尝试使用popen调用tcpdump并传递标准输出,但它似乎不起作用。
有关如何进行此操作的任何说明。
import subprocess def redirect(): tcpdump = subprocess.Popen("sudo tcpdump...", stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True) while True: s = tcpdump.stdout.readline() # do domething with s redirect()
您可以使tcpdump用“ -l”行缓冲。然后,您可以使用子流程捕获输出结果。
import subprocess as sub p = sub.Popen(('sudo', 'tcpdump', '-l'), stdout=sub.PIPE) for row in iter(p.stdout.readline, b''): print row.rstrip() # process here