以前、私はこの質問をしました:
ネイティブ python を使用して ping または traceroute を実行するにはどうすればよいですか?
ただし、python はルートとして実行されていないため、ネイティブ python で ping/traceroute を実行するために必要な未加工の ICMP ソケットを開く機能がありません。
これにより、システムの ping/traceroute シェル コマンドの使用に戻ります。この質問には、subprocess
うまく機能しているように見えるモジュールを使用した例がいくつかあります。
ただし、もう 1 つ要件があります。生成された出力にアクセスできる必要があります (たとえば、長時間実行される traceroute の場合など)。
上記のすべての例はシェル コマンドを実行し、コマンドが完了すると完全な出力にアクセスできるようになります。生成されたコマンド出力にアクセスする方法はありますか?
編集: Alex Martelliの答えに基づいて、これがうまくいきました:
import pexpect
child = pexpect.spawn('ping -c 5 www.google.com')
while 1:
line = child.readline()
if not line: break
print line,