Pythonから外部コマンドを実行する

関数がいくつかあってややこしいのでメモ。

非推奨の方法

osモジュールや、commandsモジュールを使う方法は古いので非推奨となっている。

osモジュールを使う

osモジュールのsystem()を使う。この関数は標準 C 関数のsystem() を使って実装されている。戻り値はプロセスの終了ステータスで成功時は0を返す。

import os
os.system('ls')

commandsモジュールを使う

commandsモジュールのgetstatusoutput()とgetoutput()をつかうことができる。
getstatusoutput()は、コマンドを実行したプロセスの終了ステータスと結果のタプル(status, output)を返す。

import commands
commands.getstatusoutput('ls')

getoutput()は、コマンドを実行した結果のみを返す。

commands.getoutput('ls')

推奨されている方法

subprocessモジュールのcall()や、check_call()、check_output()を使う。
call()は、プロセスの終了ステータスを返す。

import subprocess
subprocess.call('ls')

check_call()はそれに加え、エラー時には例外を投げる。

subprocess.check_call('ls')

check_output()はコマンドを実行した結果を返し、エラー時には例外を投げる。

subprocess.check_output('ls')