基本
os.systemを使うのが従来は一般的であったが,subprocessを使うのが現代的らしい.
参考: http://stackoverflow.com/questions/4813238/difference-between-subprocess-popen-and-os-system
import subprocess
cmd = 'myprogram myargs'
returncode = subprocess.call(cmd)
簡単な呼び出しであればcallで十分だが,より汎用的かつ一般的にはPopenを使うのが良いらしい.
以下の参考文献によれば,Popenはコマンド実行をブロックしない(=コマンドが終わるのを待たずに次の行に進める)という利点があり,callはPopenにコマンドブロックをつけた実装になっているようである.
参考: http://stackoverflow.com/questions/7681715/whats-the-difference-between-subprocess-popen-and-call-how-can-i-use-them
import subprocess
cmd = 'myprogram myargs'
returncode = subprocess.Popen(cmd)
注意
しかしこれでは,dirやechoなどのWindows built-inコマンドを呼び出すことができない.
呼び出そうとしても,「指定されたファイルは見つかりません」というエラーが帰ってくる.
参考: http://stackoverflow.com/questions/19819417/how-to-use-subprocess-in-windows
解決策は,shell=Trueを付けること.
import subprocess
cmd = 'dir .'
returncode = subprocess.Popen(cmd, shell=True)
先ほどの参考資料にも少しだけ記載があるように,Windowsでshell=Trueを付けると,実際にはコマンドプロンプト cmd.exe が呼び出されて,その上でコマンドが実行される.
このオプションを付けない場合 もしくは shell=Falseとした場合には,拡張子を含めた実際のファイル名を指定しないと呼び出しが発生しない.
さらに注意
多くの人にはたぶん不要であるが,上記の通り,shell=Trueを付けて呼び出されるのはコマンドプロンプトであるため,Powershellの上で実行できる各種のシェルコマンドは,subprocessから呼び出すことはできない.