忍者ブログ
[383] [382] [381] [380] [379] [378] [377] [376] [375] [374] [373]

DATE : 2017/10/21 (Sat)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


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
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
09 2017/10 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
09 2017/10 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)