我尝试使用子进程从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)如何避免这个问题。我想不出一个干净的解决方案。
发布于 2012-07-08 01:42:58
不要休眠和等待(这只会导致airodump阻塞满管道缓冲区),也不要使用无界的read()。communicate()方法可以完成您所需的工作:
o_airodump, unused_stderr = airodump.communicate(timeout=15)
airodump.kill()注意:通信的超时参数是在Python3.3中引入的,现在还没有完全用完。;)
发布于 2012-07-07 20:06:38
airodump.communicate() 等待进程终止,然后返回(stdout, stderr)
如果你真的在推,你总是可以使用ctype直接链接到c库。享受黑客攻击吧。
https://stackoverflow.com/questions/11374825
复制相似问题