1

運が悪いサブプロセスを使用して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)

この問題を回避する方法。1つのクリーンな解決策を考えることはできません。

4

2 に答える 2

2

スリープして待機しないでください (完全なパイプバッファーで airodump がブロックされるだけです)。無制限の read() を使用しないでください。communicate() メソッドは必要なことを行います:

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

注: 通信のタイムアウト パラメータは、まだ完全にリリースされていない Python 3.3 で導入されまし。;)

于 2012-07-07T17:42:57.730 に答える
1
airodump.communicate() 

プロセスが終了するのを待ってから戻ります(stdout, stderr)

本当にプッシュした場合は、ctypesを使用していつでもcライブラリに直接リンクできます。ハッキングをお楽しみください。

于 2012-07-07T12:06:38.423 に答える