【问题标题】:Python: Hide sub-process print out on the terminal and continue the script while sub is runningPython:在终端上隐藏子进程打印并在子运行时继续脚本
【发布时间】:2012-07-21 07:19:39
【问题描述】:

有没有办法使用 python2.6 和 subprocess.Popen()os.system() 来运行两个任务?示例脚本将首先运行“airodump-ng”,然后该进程是子进程并被隐藏(意味着不会从终端打印出来),然后继续运行包含“sniff”scapy 函数的脚本的其余部分。我被研究过,但我只找到了windows版本和python3。顺便说一句,我在 debian 上运行。

【问题讨论】:

    标签: python debian subprocess scapy


    【解决方案1】:

    subprocess.Popensubprocess.PIPE 结合使用:

    p = Popen(['airodump-ng', …], stdin=PIPE, stdout=PIPE, stderr=PIPE)
    

    如果你想等到进程完成使用:

    stdout, stderr = p.communicate()
    

    如果您省略上面的代码 airodump-ng 将在后台运行并且不会产生可见的输出,而您可以继续使用您的 python 代码。

    另一种方法是使用os.devnullairodump-ng 的输出重定向到,这将完全摆脱产生的任何输出:

    devnull = os.open(os.devnull, os.O_WRONLY)
    p = Popen(['airodump-n', …], stdout=devnull, stderr=devnull)
    

    【讨论】:

    • 很好,但我怎样才能让airodump-ng 先运行一段时间然后继续我的python 代码?我使用了time.sleep(5),但似乎效果不佳。有什么想法吗?
    • 好吧我的错,我猜是其他问题导致的。我的方案是将airodump-ng输出到cap文件,我使用sniff(store=0, offline='myTraffic.cap', prn=sniffFunction),其中sniffFunction为if p.haslayer(Dot11):,但它似乎只打印出一些数据包,脚本已停止,airodump-ng仍在运行的背景。 =\
    • 似乎sniff 函数认为捕获已结束并因此返回。也许scapy 中有一个函数不会返回(将其解释为流)。不幸的是,我对 scapy 和 cap 文件了解不多。
    • 好的,但似乎运行airodump-ng 两次。当我使用ps -a 时,它有两个airodump-ng 的pid cmd。但我只能杀死一个和另一个,当我要杀死它时给了我-bash: kill: (2241) - No such process
    【解决方案2】:

    在您输入命令airodump-ng 的位置用timeout 'X's airodump-ng mon'X' 替换该部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2020-10-13
      • 2019-01-04
      • 2021-01-26
      • 2020-02-02
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多