home changes contents help options

209:コマンドとしてもライブラリとしても使えるようにする

(Ruby のライブラリは Python のモジュールやパッケージに相当します。)

ある Python スクリプトをコマンドとしてもモジュールとしても使えるようにするには、コマンドとして実行される部分を「if __name__ == '__main__'」でブロックします。

#!/usr/bin/python
# -*- coding: utf-8 -*-

u"""モジュールとしてもコマンドとしても使用できるスクリプトの例
"""

# (UNIX系限定)1行目は #! と Python インタプリタへの絶対パスにする。
# もしくは env を使った抜け道を使用。 #!/usr/bin/env python などとする。

# スクリプトの文字コードが ASCII 以外ならば 1, 2行目のいずれかに明示する

# 関数、クラスなど、自由に定義する
def hello():
    return 'Hello World'

# コマンドとして実行されたときのみ、行う処理を関数にまとめる
# 名前は自由だが main, test, _test などとされているコードが多い
def main():
    print hello()

# if 文でブロック
if __name__ == '__main__':
    # コマンドとして実行されたときのみ、ここは実行される
    main()

「if __name__ == '__main__'」 以下に直接コードを書いてもかまいません。ただし、この例のように main 関数にしておくと、モジュールとして使った際も、これを module.main() のようなコードで実行できるのでおすすめです。

__name__ はモジュールとして扱われた場合にはスクリプトのファイルパスを表す文字列に、コマンドとして扱われた場合には '__main__' になる変数です。