Introducción
Esta sección introduce el concepto de un programa principal o módulo principal.
This tutorial is from open-source community. Access the source code
💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí
Esta sección introduce el concepto de un programa principal o módulo principal.
En muchos lenguajes de programación, existe el concepto de una función o método main.
// c / c++
int main(int argc, char *argv[]) {
...
}
// java
class myprog {
public static void main(String args[]) {
...
}
}
Esta es la primera función que se ejecuta cuando se lanza una aplicación.
Python no tiene una función o método main. En cambio, existe un módulo principal. El módulo principal es el archivo fuente que se ejecuta primero.
$ python3 prog.py
...
Cualquier archivo que le des al intérprete al inicio se convierte en main. No importa el nombre.
__main__
Es una práctica estándar para los módulos que se ejecutan como un script principal utilizar esta convención:
## prog.py
...
if __name__ == '__main__':
## Ejecutándose como el programa principal...
declaraciones
...
Las declaraciones incluidas dentro de la instrucción if
se convierten en el programa principal.
Cualquier archivo de Python puede ejecutarse como principal o como una importación de biblioteca:
$ python3 prog.py ## Ejecutándose como principal
import prog ## Ejecutándose como importación de biblioteca
En ambos casos, __name__
es el nombre del módulo. Sin embargo, solo se establecerá en __main__
si se ejecuta como principal.
Por lo general, no se desea que las declaraciones que forman parte del programa principal se ejecuten durante una importación de biblioteca. Por lo tanto, es común tener una comprobación if
en el código que puede usarse de cualquiera de las dos maneras.
if __name__ == '__main__':
## No se ejecuta si se carga con import...
A continuación se presenta una plantilla de programa común para escribir un programa de Python:
## prog.py
## Declaraciones de importación (bibliotecas)
import módulos
## Funciones
def spam():
...
def blah():
...
## Función principal
def main():
...
if __name__ == '__main__':
main()
Python se utiliza a menudo para herramientas de línea de comandos
$ python3 report.py portfolio.csv prices.csv
Esto significa que los scripts se ejecutan desde la shell / terminal. Los casos de uso comunes son para automatización, tareas en segundo plano, etc.
La línea de comandos es una lista de cadenas de texto.
$ python3 report.py portfolio.csv prices.csv
Esta lista de cadenas de texto se encuentra en sys.argv
.
## En el comando bash anterior
sys.argv ## ['report.py, 'portfolio.csv', 'prices.csv']
A continuación se presenta un ejemplo simple de procesamiento de los argumentos:
import sys
if len(sys.argv)!= 3:
raise SystemExit(f'Usage: {sys.argv[0]} ' 'portfile pricefile')
portfile = sys.argv[1]
pricefile = sys.argv[2]
...
La Entrada/Salida estándar (o stdio) son archivos que funcionan de la misma manera que los archivos normales.
sys.stdout
sys.stderr
sys.stdin
Por defecto, la función print
se dirige a sys.stdout
. La entrada se lee de sys.stdin
. Las trazas de pila y los errores se dirigen a sys.stderr
.
Tenga en cuenta que el stdio puede estar conectado a terminales, archivos, tuberías, etc.
$ python3 prog.py > results.txt
## o
$ cmd1 | python3 prog.py | cmd2
Las variables de entorno se establecen en la shell.
$ export NAME dave
$ export RSH ssh
$ python3 prog.py
os.environ
es un diccionario que contiene estos valores.
import os
name = os.environ['NAME'] ## 'dave'
Los cambios se reflejan en cualquier subproceso lanzado posteriormente por el programa.
La salida del programa se maneja a través de excepciones.
raise SystemExit
raise SystemExit(exitcode)
raise SystemExit('Mensaje informativo')
Una alternativa.
import sys
sys.exit(exitcode)
Un código de salida no nulo indica un error.
#!
En Unix, la línea #!
puede ejecutar un script como Python. Agregue lo siguiente a la primera línea de su archivo de script.
#!/usr/bin/env python3
#./prog.py
...
Requiere permiso de ejecución.
$ chmod +x prog.py
## Luego puede ejecutar
$./prog.py
... salida...
Nota: El lanzador de Python en Windows también busca la línea #!
para indicar la versión del lenguaje.
Finalmente, aquí está una plantilla de código común para los programas de Python que se ejecutan como scripts de línea de comandos:
#!/usr/bin/env python3
#./prog.py
## Import statements (libraries)
import modules
## Functions
def spam():
...
def blah():
...
## Main function
def main(argv):
## Parse command line args, environment, etc.
...
if __name__ == '__main__':
import sys
main(sys.argv)
main()
En el archivo report.py
agregue una función main()
que acepte una lista de opciones de línea de comandos y produzca la misma salida que antes. Debería poder ejecutarlo de manera interactiva como esto:
>>> import report
>>> report.main(['/home/labex/project/report.py', '/home/labex/project/portfolio.csv', '/home/labex/project/prices.csv'])
Name Shares Price Change
---------- ---------- ---------- ----------
AA 100 9.22 -22.98
IBM 50 106.28 15.18
CAT 150 35.46 -47.98
MSFT 200 20.89 -30.34
GE 95 13.48 -26.89
MSFT 50 20.89 -44.21
IBM 100 106.28 35.84
>>>
Modifique el archivo pcost.py
de modo que tenga una función main()
similar:
>>> import pcost
>>> pcost.main(['/home/labex/project/pcost.py', '/home/labex/project/portfolio.csv'])
Total cost: 44671.15
>>>
Modifique los programas report.py
y pcost.py
de modo que puedan ejecutarse como un script en la línea de comandos:
$./report.py portfolio.csv prices.csv
Name Shares Price Change
---------- ---------- ---------- ----------
AA 100 9.22 -22.98
IBM 50 106.28 15.18
CAT 150 35.46 -47.98
MSFT 200 20.89 -30.34
GE 95 13.48 -26.89
MSFT 50 20.89 -44.21
IBM 100 106.28 35.84
$./pcost.py portfolio.csv
Total cost: 44671.15
¡Felicitaciones! Has completado el laboratorio del Módulo Principal. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.