Python:在终端上隐藏子进程打印输出,并在子进程运行时继续脚本

Python:在终端上隐藏子进程打印输出,并在子进程运行时继续脚本,python,debian,subprocess,scapy,Python,Debian,Subprocess,Scapy,有没有办法将python2.6与subprocess.Popen()或os.system()一起使用来运行两个任务?示例:脚本将首先运行“airodump ng”,然后此过程为子过程并隐藏(意味着不会从终端打印出来),然后继续运行脚本的其余部分,其中包含scapy的“sniff”功能。我被调查过,但我只找到了windows版本和python3。顺便说一句,我在debian上运行。结合使用: 如果要等待流程完成,请使用: stdout, stderr = p.communicate() 如果省略

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

结合使用:

如果要等待流程完成,请使用:

stdout, stderr = p.communicate()
如果省略上面的代码,
airodump ng
将在后台运行,并且不会产生可见的输出,而您可以继续使用python代码

另一种方法是使用
os.devnull
airodump ng
的输出重定向到,这将完全消除产生的任何输出:

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

在您放置命令的地方,
airodump ng
将该部分替换为
timeout'X's airodump ng mon'X'

很好,但是如何让
airodump ng
先运行一段时间,然后继续我的python代码?我用了
时间。睡眠(5)
,但似乎效果不好。有什么想法吗?好吧,我错了,我想是其他问题造成的。我的场景是将
airodump ng
输出到cap文件,我使用
sniff(store=0,offline='myTraffic.cap',prn=sniff函数)
其中sniff函数是
如果p.haslayer(Dot11):
但它似乎只打印了一些数据包,脚本已经停止,并且
airodump ng
仍在后台运行=\似乎
sniff
函数认为捕获已结束,因此返回。可能
scapy
中有一个函数不返回(将其解释为流)。不幸的是,我对scapy和cap文件不太了解,无法在这里提供帮助。好的,但它似乎运行了两次
airodump ng
。当我使用
ps-a
时,它有两个pid命令
airodump ng
。但是当我要杀死它时,我只能杀死一个和另一个给了我
-bash:kill:(2241)-没有这样的过程
devnull = os.open(os.devnull, os.O_WRONLY)
p = Popen(['airodump-n', …], stdout=devnull, stderr=devnull)