category: Python
DATE : 2010/04/04 (Sun)
DATE : 2010/04/04 (Sun)
subprocessモジュールを使うと、Pythonからコマンドを実行できて便利です。以下のように指定すると、シェルスクリプトも実行できます。
import subprocess subprocess.call(""" <command1> <argument1 ...> <command2> <arguemnt2 ...> """, shell = True)
しかし、シェル組み込みのコマンド(sourceなど)を使用する場合は、executable引数を指定しないと、実行時にエラーとなる可能性があります。executable引数を指定しない場合、subprocessモジュールは、Unix系の環境では/bin/shをシェルとして使用します。
ディストリビューションによって/bin/shにリンクされているシェルが異なります。例えば、Red Hat系ではbashなことが、Debian系ではdashなことが多いようです。
そのため、executable引数にそのシェルのパスを指定しないと、他のディストリビューションにPythonスクリプトを移行した際に急に動かなくなるという現象が起こります(;´Д`)実際に体験しました
先程のスクリプトをexecutable引数を用いたものに書き直すと、次のようになります(以下の例では、bashに依存するスクリプトの場合です)。実際には、ディストリビューションによってシェルの場所も/bin配下にあったり/usr/bin配下にあったりする場合があるので、executable引数に渡す文字列は定数扱いにしておいた方がメンテナンスしやすいかと思います。
import subprocess BASH = '/bin/bash' subprocess.call(""" <command1> <argument1 ...> <command2> <arguemnt2 ...> """, shell = True, executable = BASH)
PR
●この記事にコメントする
忍者ブログ [PR]