【发布时间】:2022-11-21 17:32:53
【问题描述】:
我想在 python 脚本中处理 tcpdump 输出,到目前为止我能够实现这个实现
from subprocess import Popen, PIPE, CalledProcessError
import os
import signal
import time
if __name__=="__main__":
cmd = ["sudo","tcpdump", "-c","1000","-i","any","port","22","-n"]
with Popen(cmd, stdout=PIPE, bufsize=1, universal_newlines=True) as p:
try:
for line in p.stdout:
print(line,flush=True) # process line here
except KeyboardInterrupt:
print("Quitting")
这是我从this previously asked question.的第二个答案中得到的 虽然它不等待子进程完成以打印 tcpdump 的输出,但我仍然一次获得 20-30 行的块输出。即使子进程的 stdout pf 中只有一行,有没有办法读取?
PS:我在带有 ubuntu 服务器 22.04.1 的树莓派 4 上运行这个脚本
【问题讨论】:
-
切线地,你放在
if __name__ == '__main__':中的代码应该是绝对微不足道的。该条件仅在您import此代码时才有用;如果当您import时所有有用的功能都被排除在外,您将永远不想这样做。另见stackoverflow.com/a/69778466/874188
标签: python ubuntu networking scripting subprocess