2011-03-12 11 views
15

私は最近読んでいるPythonスクリプトのいくつかでこれを見てきました。私は医者を見た。彼らは終端値や何らかの文字列を渡すことを扱う例しか与えていません。これは何を意味するのですかexit(main())

これはメインメソッドと呼ばれるものですが、終了すると思いますか?

誰かがこれについていくつか光を当てることができたら、私はそれを感謝します。

if __name__ == "__main__": 
    exit (main()) 

してください。これは機能main()とするとき、メイン仕上げを呼び出します、それはシステムにmain()の結果であるリターンコードを与えて終了しますあなたの

+1

あなたはもっと興味がありますか? –

+1

@Chris question title :) – myusuf3

答えて

16

に感謝します。

これは使用されるかもしれない簡単な例:明示的な戻り値はmain()に指定されていない場合

def main(): 
    try: 
     doSomething() 
     return 0 
    except: 
     return 1 


if __name__ == "__main__": 
    exit (main()) 


Noneのデフォルト値が返されます。これにより、明示的にreturn 0を指定するのと同じシステム戻りコードが生成されます。 mainが整数またはNone以外のものを返すと、システム戻りコード1が生成されます。

+0

'try'と' except'はPythonで大文字ではないことに注意してください。 – themaninthewoods

+0

もちろん正しいです。 StackOverviewでは、間違いが見つかったときに直接回答を編集することをお勧めします。 – amicitas

+0

はい、ただし、StackOverflowでは2文字の編集はできません。私は試した。したがってコメント。 – themaninthewoods

3

main()関数を実行し、main()関数が返す戻りコードで終了することを意味します。それは、シェルからスクリプトを実行するときに、それが成功したかどうかを確実に伝えることができるようにするための一般的なイディオムです。

if __name__ == '__main__':イディオムは、モジュールをスクリプトとして(インポートするのではなく)実行する場合にのみ、コードを実行する一般的な方法です。

4

main()にsys.exit()の呼び出しが含まれていると、インタープリタを終了するためです。

これは、main()の戻り値をスクリプトの戻りコードとして使用する理由です。

15

Pythonスクリプトを直接実行すると、__name__"__main__"に設定されますが、別のスクリプトからimportに設定されている場合はそうではありません。

この場合、スクリプトは、あなたが直接実行しているかどうかを確認しています。そうであれば、main()関数を呼び出して何らかの作業を行い、main()関数の戻り値をexit()経由でシステムに返します。スクリプトが別のモジュールからインポートされている場合、main()関数は実行されず、スクリプトの関数とクラスがスクリプトimportに提供されます。

これはPythonの共通のイディオムです。これにより、スタンドアロンのプログラムであるスクリプトを作成できますが、importスクリプトが実行したくない作業をせずにimportにすることもできます。

1

ただ、質問に言及したスクリプトのタイプに例を追加:

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

from youtube_dl import main 

if __name__ == '__main__': 
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) 
    sys.exit(main()) 

これは別のmain機能がyoutube_dlモジュールからインポートされたユーチューブ-dlのパッケージからです。@Chrisが指摘しているようにスクリプトを直接実行する場合、これは "__name____main__に設定されている"と混同しないように注意してください。全体として、exit(main()) を使用して、スクリプトをきちんと実行させることができます。

関連する問題