2009-07-10 2 views
7

__name__ == '__main__'が、ファイルではなくモジュールを介して直接呼び出されているときに、コードを実行するための一般的なイディオムであるかどうかを確認します。Pythonスクリプトで__name__の可能な値は何ですか?その意味は何ですか?

Djangoのmanage.pyのカスタムコマンドを書く過程で、標準的なpythonシェルのユーザーに影響を与えるcode.InteractiveConsoleを使用する必要があることがわかりました。私が行っていたテストコードでは、私が実行しようとしているスクリプトで、__name__がに依存する__console__であることがわかりました。

オリジナルの実装に変更があることはかなり確信していますが、別のものが何であるのか不思議です。__name__私は、可能な値についてのいかなるドキュメンテーションも、それらが意味するものを見つけることができなかったので、私はここで終わった。

答えて

6

クラスcode.InteractiveInterpreter([ローカル])のdocumentから:
オプション地元の引数は、コードが実行される辞書を特定します。キー'__name__''__console__'に設定され、キー'__doc__'Noneに設定された新しく作成された辞書がデフォルトになります。 多分uは、地元の人々の引数をturnning __main____name__を設定、または

if __name__ == '__main__' 
to 
if __name__ in set(["__main__", "__console__"]) 

からテスト句を変更することができますが、それがお役に立てば幸いです。

+0

@ S.Lott、助けてくれてありがとう! – sunqiang

+1

おそらくset()やリストは必要ないでしょう。文字列の1つのタプルを使うことができます。 –

+0

@GringoSuaveが同意します:) – sunqiang

4

__name__は通常はモジュール名ですが、問題のモジュールを別のモジュールでインポートするのではなく直接実行すると、'__main__'に変更されます。

他の値は、実行しているコードによってのみ直接設定できることを理解します。

+1

詳細については、http://docs.python.org/reference/toplevel_components.htmlを参照してください。 '__name__'はモジュール名です。 '__main__'は特別なモジュールです。 –

関連する問題