我试图使用子进程从 airodump-ng 获取标准输出,但没有成功。 我认为我的代码导致了死锁。
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)
如何避免这个问题。想不出一个干净的解决方案。
最佳答案
不要 sleep 和等待(这只会导致 airodump 在完整的管道缓冲区上阻塞)并且不要使用无限制的 read()。 Communication() 方法可以满足您的需要:
o_airodump, unused_stderr = airodump.communicate(timeout=15)
airodump.kill()
注意:通信超时参数是在 Python 3.3 中引入的,但尚未完全退出。 ;)
关于python - 子进程抓取 airodump-ng 的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374825/