subprocess grab stdout of airodump-ng

时间:2012-07-07 12:02:11

标签: python python-3.x subprocess

我试图使用子进程从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)

如何避免此问题。不能想到一个干净的解决方案。

2 个答案:

答案 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库。享受黑客攻击。