home changes contents help options

218:コマンドを実行する

単純にコマンドを実行するには、osモジュールのsystemを使います。

 import os
 a = os.system('sleep 1')

osモジュールのpopen2などを使い、子プロセスを起動させます。popen2,popen3,popen4とあり、やり取りするパラメータが違います。詳しくは、http://www.python.jp/doc/release/lib/os-newstreams.html#os-newstreamsを見てください。

実は、これらのメソッドは子プロセスからリターンコードを取得できません。つまり、コマンドを起動したら、後は待つしかないわけです。入出力ストリームを制御し、かつ終了コードの取得も行える唯一の方法は、 popen2 モジュール の Popen3 と Popen4 クラスを利用する事です。これらは Unix上でのみ利用可能です。Windowsでは方法はありません。

2012年3月15日追加

popen2モジュールは、python2.6で廃止されたようです。subprocessモジュール を使ってください。

tracertコマンドを実行した例:

WindowsのPCには、正確にはなんと言うのか分からないがホスト名のようなものがついている。 自分のいるネットワーク上にどういうホスト名を持つPCがあるかを知りたかったので、pythonで次のようなプログラムを作ってみた。 Windows2000にはtracertというコマンドがあるのだが、ルーティングだけでなくホスト名が表示されるのでそれを利用している。

 def gethostname(ipaddress):
     import os,string
     cmd=('tracert -w 10 -h 1 '+address)
     #print cmd
     p=os.popen2(cmd)
     result = p[1].read()
     ##print result
     print string.split(result,'\r\n')[1]

 baseaddress='192.168.11'
 for i in range(10):
     address=baseaddress+'.'+str(i)
     #print addres
     gethostname(address)

こんな表示がでる。正規表現を使って切り出せばなおよい。

 Tracing route to 192.168.11.0 over a maximum of 1 hops
 Tracing route to (none) [192.168.11.1]
 Tracing route to zope-pc [192.168.11.2]
 Tracing route to lightson.dip.jp [192.168.11.3]