我试图使用子进程从airodump-ng中获取stdout而没有运气。 我认为我的代码会导致死锁。
airodump = subprocess.Popen(['airodump-ng','mon0'],stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
# wait for 15 seconds to find all networks
time.sleep(15)
# save the output
o_airodump = airodump.stdout.read()
os.kill(airodump.pid, signal.SIGKILL)
# airodump.terminate
print(o_airodump)
如何避免此问题。不能想到一个干净的解决方案。
答案 0 :(得分:2)
不要睡觉和等待(这只会导致airodump阻塞整个管道缓冲区)并且不使用无界读取()。 communic()方法可以满足您的需求:
o_airodump, unused_stderr = airodump.communicate(timeout=15)
airodump.kill()
注意:沟通的超时参数是在Python 3.3中引入的,它还不是相当。 ;)
答案 1 :(得分:1)
airodump.communicate()
等待进程终止然后返回(stdout, stderr)
如果你真的推了,你总是可以使用ctypes直接链接到c库。享受黑客攻击。