2012-01-03 26 views
12

Estoy escribiendo un archivo de Python mylib.pypython: cómo saber si el archivo se ejecutó como importación frente a script principal?

me gustaría mylib.py para hacer algo basado en sys.argv si está siendo ejecutado como un script. Pero si se importa desde algún otro script, no quiero que haga eso.

¿Cómo puedo saber si mi archivo python se está importando o si es un script principal?

(he visto cómo hacer esto antes, pero se me olvidó.)

+1

No estás solo en esto, por cierto. El conjuro es difícil de recordar al principio y a menudo se considera una verruga del lenguaje. –

+3

Parece que debería haber una función 'sys.isMain()' para facilitar esto. –

Respuesta

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

Aquí es el documentation on __main__.

Normalmente este código se coloca en la parte inferior de un módulo, y una forma común de mantener su código limpio es crear una función main() que hace todo el trabajo, y solo llama a esa función dentro del condicional.

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

Los paquetes también pueden contener __main__ módulo, que se ejecuta cuando se hace python -m foo (o ejecutar archivo zip que contiene el paquete).

1

Mediante el uso de (la colocación de las declaraciones que desea ser ejecutado sólo cuando el módulo se está ejecutando como main, no importadas)

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

declaraciones Generalmente diferentes tienen tiene que ser colocado en este bloque 'si' como, específico del módulo de doctest llamada o de impresión cosa statements.The es por defecto (cuando se ejecuta como principal) del '__name__' variable se establece en "__main__", y de otra manera (si importados) la variable __name__ obtendrá un valor diferente, probablemente el nombre del módulo.

+1

+1 ya que es correcto ... pero ya recibí una respuesta correcta hace un año. –

+0

@JasonS lo vio, pero quería compartir mi respuesta (de hecho, yo mismo he captado el concepto recientemente). Gracias –

Cuestiones relacionadas