airodump中 - NG的子抢标准输出(subprocess grab stdout of a

2019-10-16 23:09发布

我试图用抢子,没有运气从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)

如何避免这个问题。 不能相信一个干净的解决方案。

Answer 1:

不睡觉,等待(这将正义事业airodump中,对一个完整的管道缓冲块),不要使用无界阅读()。 该通信()方法完成你所需要的:

o_airodump, unused_stderr = airodump.communicate(timeout=15)
airodump.kill()

注意:通信的超时参数在Python 3.3中引入这倒不出来呢。 ;)



Answer 2:

airodump.communicate() 

该过程终止,然后等待返回(stdout, stderr)

如果你真的推你总是可以使用ctypes的直接链接到C库。 享受黑客。



文章来源: subprocess grab stdout of airodump-ng