このスクリプト:
import subprocess
import os
with open(os.devnull, "wb") as limbo:
for n in xrange(1, 10):
ip="192.168.0.{0}".format(n)
result=subprocess.Popen(["ping", "-c", "1", "-n", "-W", "2", ip],
stdout=limbo, stderr=limbo).wait()
if result:
print ip, "inactive"
else:
print ip, "active"
次のような出力が生成されます。
192.168.0.1 active
192.168.0.2 active
192.168.0.3 inactive
192.168.0.4 inactive
192.168.0.5 inactive
192.168.0.6 inactive
192.168.0.7 active
192.168.0.8 inactive
192.168.0.9 inactive
オブジェクトを置き換えlimbo
てsubprocess.PIPE
使用するとcommunicate()
、出力をキャプチャできます。Popen
p=Popen( ... )
output=p.communicate()
result=p.wait()
このようにして、コマンドの戻り値を取得し、テキストをキャプチャできます。マニュアルに従うと、柔軟性が必要な場合、これがサブプロセスを操作するための推奨される方法です。
このモジュールの基礎となるプロセスの作成と管理は、Popenクラスによって処理されます。開発者が便利な機能でカバーされていないあまり一般的でないケースを処理できるように、それは多くの柔軟性を提供します。