Función main()
La función main()
es,
como su nombre indica,
la función que incluye la rutina principal del programa.
Esta rutina principal es siempre el lugar por donde comienza a ejecutarse el programa
y, salvo indicación contraria,
es donde también termina la ejecución.
Sintaxis
A diferencia de otros lenguajes de más bajo nivel,
Python no requiere indicar explicitamente una función principal (main) sino que presupone que la función principal es la rutina del archivo invocado por el usuario o por el sistema operativo.
A esta función el intérprete de Python le da el nombre "__main__
"
y dicho valor se consulta desde la variable especial __name__
.
En cambio, las rutinas presentes en otros archivos serán consideradas por el intérprete de Python como funciones ó rutinas secundarias.
Esta diferenciación es importante cuando se usan módulos en un programa, pues estos no quedan incluidos
como parte de la función main()
.
Rutina exclusiva de main()
Para ejecutar una rutina únicamente en el programa principal (es decir, si se invoca directamente al archivo que las contiene) se puede englobar la rutina con el siguiente condicional:
Esta forma es útil para crear demos y tests dentro de los archivos donde se crean funcionalidades, clases, etc. de modo que sólo se ejecuten los demos cuando se los llama directamente.Argumentos de main()
Para leer los argumentos (valores) que se pasan al invocar el programa desde la terminal se puede usar el módulo sys
y leer la variable argv
, la cual es una lista con todos los argumentos en formato texto
from sys import argv #importacion del módulo del sistema
lista_valores = argv # lista de argumentos
argumento_0 = argv[0] # ruta del programa
argumento_1 = argv[1] # 1º argumento de entrada
argumento_2 = argv[2] # 2º argumento de entrada
# ....
argv[0]
Tener en cuenta que el primer valor de todos (argv[0]
) es la ruta relativa del archivo del programa.
Ejemplo 1: nombre y argumentos
Un archivo 'entrada.py' con el código:
y al llamarlo con la terminal (ej: Bash) así: dará como resultado la siguiente lista de argumentos numerados: Se observa que el primer argumento coincide con el nombre del archivo de programa.Ejemplo 2: ruta y argumentos
Si la rutina previa está alojada en un subdirectorio llamado 'carpeta':
dará como resultado esta vez:
Se verifica entonces que el primer argumento es la ruta relativa del archivo de programa.Más información sobre los argumentos de main()
: módulo sys
Valor de retorno
La rutina principal puede tener un valor de retorno. Este valor puede ser una simple variable que indique el éxito o el fracaso del procesamiento interno .
El valor de retorno se envía con ayuda de la función exit()
incluida en el módulo sys
:
import sys
if __name__ == "__main__":
# (Rutina principal)
print("Rutina principal completa")
sys.exit(0) # codigo ejecución exitosa
Esta función indica la intensión de salir del intérprete y su argumento es el valor de retorno.
Los valores habituales de salida son los siguientes:
Valor | Significado |
---|---|
0 , None |
Terminación exitosa |
1 |
Error genérico |
2 |
Error (sólo sintaxis de línea de comandos) |
El valor de retorno también puede ser un valor o una estructura de datos completa; sin embargo estos casos deben manejarse con más cuidado porque dichos valores pueden ser malinterpretados como códigos de error.
Encapsular rutina principal
Se puede englobar la rutina principal
y pasarla como argumento a la función exit()
:
import sys
# funcion wrapper
def principal():
# (Rutina principal)
print("Rutina principal completa")
return 0 # valor de retorno
if __name__ == "__main__":
sys.exit(principal())
de esta forma el intérprete ejecutará la función wrapper (envolvente) y su valor de retorno se pasará a la shell al terminar.