0

問題は、プロセスが開始されていないことです。オブジェクトは作成されますが、プロセスはありません。

os.kill ステートメントの前に time.sleep() を配置すると、制御できなくなります。プロセスは開始されますが、強制終了されません。さらに、標準出力が失われます。入力したものは何も表示されません (それも null になると思います)。ターミナルを閉じて、新しいターミナルを開き、プロセスを手動で強制終了する必要があります (python を起動して、その正確なコマンドを発行するだけで問題は解決します)。

airodump = subprocess.Popen('airodump-ng -w outputfile mon0',shell=True,stdout=open('/dev/null', 'w'), stderr=open('/dev/null', 'w'))
#time.sleep(5)
os.kill(airodump.pid, signal.SIGTERM)   # airodump-ng
#airodump.wait()
print airodump

メソッド Popen.terminate()、Popen.kill() を呼び出してみました。私はPopenで何かが欠けています....

「print airodump」の前に Popen.wait() を入れても、バイパスされてオブジェクトアドレスが出力されます。そのちょっとした癖が、何が起こっているのかについての私の理解に何かが正しくないことを私に確信させたものです.

4

1 に答える 1

3

試してみてください:

airodump = subprocess.Popen(['airodump-ng', '-w', 'outputfilename', 'mon0'],
                            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(secs)
airodump.terminate()
return_code = airodump.wait()

文字列コマンドをリストに置き換え、shell=True と stdout を削除したことに注意してください。最初の shell=True はすべてのデバッグを難しくするので、それなしでこれを実行してみる必要がありますが、それを行うには、コマンドに文字列ではなくリストを使用する必要があります。

stdout/stderr をキャプチャし、それらが画面に表示されないようにするより標準的な方法は、stdout=subprocess.PIPE. それでも期待どおりに動作しない場合は、airodump.stdout と airodump.sterr をチェックして、プロセスで何が起こっているかを確認してください。始めるにはこれで十分だと思います。

于 2012-10-24T03:48:20.890 に答える