2012-01-03 9 views
12

Piszę plik Pythona mylib.pypython: jak sprawdzić, czy plik został wykonany jako import, czy główny skrypt?

chciałbym mylib.py coś zrobić w oparciu o sys.argv jeśli jest wykonywane jako skrypt. Ale jeśli jest importowany z jakiegoś innego skryptu, nie chcę tego robić.

Jak sprawdzić, czy mój plik python jest importowany lub jest to skrypt główny?

(widziałem jak to zrobić wcześniej, ale zapomniałem.)

+1

Nie jesteś sam w tym, przy okazji. Zaklęcie jest początkowo trudne do zapamiętania i często jest uważane za brodawkę języka. –

+3

Wygląda na to, że powinna istnieć funkcja 'sys.isMain()', aby było to łatwiejsze. –

Odpowiedz

25
if __name__ == '__main__': 
    # this was run as a main script 

Oto documentation on __main__.

Zwykle kod ten znajduje się na dole modułu, a jednym z typowych sposobów na utrzymanie kodu w czystości jest utworzenie funkcji main(), która wykonuje całą pracę i wywołuje tę funkcję tylko w warunku.

5
if __name__ == '__main__': 
    # goes here only when module is being executed directly 

Pakiety mogą również zawierać moduł __main__, który jest wykonywany, gdy robisz python -m foo (lub wykonać zipfile zawierający pakiet).

1

Używając (wprowadzanie sprawozdań, które mają być wykonywane tylko wtedy, gdy moduł pracuje jako main, nie importowane)

if __name__ == "__main__": 
     # this was run as a main script 

Generalnie różne Sprawozdanie musi być umieszczony w tym „jeśli” bloku jak moduł specyficzny doctest wezwanie lub druk statements.The rzeczą jest domyślnie (gdy działa jako główny) do „__name__” zmienna jest ustawiona na „__main__”, a inaczej (jeśli importowane) zmienna __name__ otrzyma inną wartość, najprawdopodobniej nazwę modułu.

+1

+1, ponieważ jest poprawny ... ale już rok temu otrzymałem poprawną odpowiedź. –

+0

@JasonS zobaczył to, ale chciałem podzielić się moją odpowiedzią (faktem jest, że ja sam ostatnio zrozumiałem tę koncepcję). Dzięki –

Powiązane problemy