代码之家  ›  专栏  ›  技术社区  ›  Lelouch Lamperouge

等待外部进程初始化的策略

  •  1
  • Lelouch Lamperouge  · 技术社区  · 6 年前

    1. tcpdump
    2. 执行网络活动以便 命令 可以为它生成pcap
    3. 杀死 步骤2中的网络活动完成后。

    发射

    def launch_tcpdump(output_filename):
        import subprocess as sp
        import time
        process = sp.Popen(['tcpdump', '-i', 'wlo1', '-w', output_filename])
        print(f"PID: {process.pid}")
        time.sleep(5)
        return process
    

    命令 初始化后,我的脚本将完成网络活动。另一方面,睡眠5秒钟似乎过多,并减慢了我的整个过程(我必须多次这样做,并为每个网络活动生成pcap)。

    1. 子进程是否有方法与已初始化的父进程通信?

    注:我明白 在不同的过程中可能意味着不同的事情。我猜一旦它输出: tcpdump: listening on wlo1, link-type EN10MB (Ethernet), capture size 262144 bytes ,已完成初始化。因此,读取stdout也是一个潜在的选择,但是我无法找到在将python从子进程分离时可以读取stdout的解决方案。

    1 回复  |  直到 6 年前
        1
  •  0
  •   mVChr    6 年前

    您可以监视 tcpdump 再过几行就回来。

    import subprocess as sp
    import time
    
    def launch_tcpdump(output_filename):
        lines_to_read = 200
        process = sp.Popen(['tcpdump', '-l', '-i', 'wlo1', '-w', output_filename])
        print(f"PID: {process.pid}")
        while lines_to_read > 0:
            for _ in iter(process.stdout.readline, ''):
                lines_to_read -= 1
        return process
    

    注意我添加了 -l 选择so 命令 stdout 标准 .