Python:在终端上隐藏子进程打印输出,并在子进程运行时继续脚本
有没有办法将python2.6与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() 如果省略
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)