python - 子进程抓取 airodump-ng 的标准输出

标签 python python-3.x subprocess

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

相关文章:

python - 子进程在终止前获取结果

python - urllib2.openurl 不适用于谷歌专利

python - 将 Python UDF 应用于 Spark 数据帧时的 java.lang.IllegalArgumentException

python - Python 生成器中的参数检查

python - 根据来自另一列 pandas 的相同或更接近的值替换列中的值

python - 如何使用 Selenium 在动态加载的网页中正确滚动?

python - Windows 上的异步子进程

python - 如何检查文件是否存在无异常?

python - "from module import class"从同一模块导入其他类