Scripts en Python
Una de las características más usadas en Python es su carácter interpretado, y por tanto su facilidad para crear scripts en Python.
Contenido
Qué es un script en Python
Un script es un código particularmente creado para resolver una tarea específica. Normalmente cumple una o varias de las siguientes características:
- Se compone de un único módulo de python (un fichero de texto con extensión .py)
- Tiene un punto entrada/ejecución al final del mismo.
- Hace uso de librerías del sistema y de comandos de bash.
- Se lanza por consola.
- Se integra con facilidad con tareas tipo cron (cronjobs).
- Define diferentes funciones simples.
- Permite el uso de argumentos desde la consola.
Estructura de un script de Python
Todo el contenido que esté en la raíz del fichero será ejecutado por tanto la forma correcta de crear scripts en Python es:
- Definir una función main que será ejecutada por el script.
- Añadir todas las funciones necesarias que serán llamadas por
main
. - Al final del módulo se añade una llamada a
main
con los parámetros necesarios y se realiza la ejecución.
Para una correcta ejecución se suele emplear: if __name__ == '__main__'
y añadir la lógica del script o la llamada a main justo después. En el siguiente ejemplo se muestra un pequeño script que pide 2 números por pantalla para multiplicarlos:
def multiply(a, b):
return float(a) * float(b)
def main():
a = input('Inserte un número: ')
b = input('Inserte otro número: ')
res = multiply(a, b)
print(f'La multiplicación es {res}')
if __name__ == '__main__':
main()
Usando este método nos aseguramos de que se puede importar este script en el futuro sin daños colaterales.
Cómo lanzar scripts de Python
Para poder lanzar scripts en Python se suele hacer desde una consola de comandos siguiendo los siguientes pasos:
- Ubicar la consola en el mismo directorio que el módulo a ejecutar. Para usuarios de MacOS X, Linux o Windows se suele usar
cd
. - Lanzar el intérprete de Python usando como primer parámetro el nombre del fichero.
La foto de la ejecución en windows muestra que se le puede pasar el path completo hasta el script al intérprete para ejecutarlo.
Lanzar scripts Python en la nube
De forma natural los scripts se ejecutan en la máquina local o en un servidor, pero muchos servicios en la nube permiten su ejecución.
Algunos de estos servicios son los siguientes:
- AWS EC2: el servicio de EC2 permite tener una máquina en Amazon donde se pueden ejecutar la tareas de forma periódica o manualmente.
- AWS Elastic Beanstalk, Azure App/could service, Heroku o google Cloud App engine: son servicios que permiten ejecutar aplicaciones Python. Usando estos servicios no hay que preocuparse de qué sistema se está usando para correr cada aplicación.
- AWS Lambda, Azure functions, Google Cloud functions o AWS Fargate: son una herramientas que provee Amazon y permiten lanzar scripts en diferentes lenguajes (entre ellos Python) de forma serverless (sin servidor propio).
Definición de parámetros para scripting
Se pueden definir parámetros para los scripts para poder cambiar sus valores dinámicamente con cada llamada al script.
import argparse
def multiply(a, b):
return float(a) * float(b)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('multiplicando', type=float, help='Número multiplicando')
parser.add_argument('multiplicador', type=float, help='Número multiplicador')
args = parser.parse_args()
res = multiply(args.multiplicando, args.multiplicador)
print(f'El resultado de la multiplicación es: {res}')
Y se ejecuta de la siguiente forma:
Para añadir parámetros a los scripts se pueden usar las librerías de argsparse, optparse o click principalmente. Y se pueden encontrar sus tutoriales en los siguientes enlaces:
Aunque click es la más simple de usar, no se encuentra dentro del build-in de Python por lo que se recomienda usar argsparse o optparse si no se quieren tener dependencias.
Ejemplos de scripts de Python
A continuación se muestran algunos ejemplos de scripts hecho en python.
Saber la hora en diferentes países
Haciendo uso de la librería de pytz se podría hacer como sigue:
from datetime import datetime
import pytz
if __name__ == '__main__':
places_tz = ['Asia/Tokyo', 'Europe/Madrid', 'America/Argentina/Buenos_Aires', 'US/eastern', 'US/Pacific', 'UTC']
cities_name = ['Tokyo', 'Madrid', 'Buenos Aires', 'New York', 'California', 'UTC']
for place_tz, city_name in zip(places_tz, cities_name):
city_time = datetime.now(pytz.timezone(place_tz))
print(f'Fecha en {city_name} - {city_time}')
$ python countries_dates.py
Fecha en Tokyo - 2020-11-01 21:55:40.339799+09:00
Fecha en Madrid - 2020-11-01 13:55:40.340915+01:00
Fecha en Buenos Aires - 2020-11-01 09:55:40.341573-03:00
Fecha en New York - 2020-11-01 07:55:40.342808-05:00
Fecha en California - 2020-11-01 04:55:40.343886-08:00
Fecha en UTC - 2020-11-01 12:55:40.343933+00:00
Conocer la cantidad de memoria y de CPU utilizadas en el sistema
Utilizando la librería psutil se puede conocer el % de uso de cada CPU del sistema, la memoria usada y la memoria disponible en el mismo.
import psutil
if __name__ == '__main__':
perc_cpu = psutil.cpu_percent(interval=1, percpu=True)
mem_virt = int(psutil.virtual_memory().used / (1024 ** 2))
avail_mem = int(psutil.virtual_memory().available * 100 / psutil.virtual_memory().total)
print(f'''Estado actual del PC:
La CPU está al {perc_cpu}%
Usando {mem_virt} Mb de memoria
Quedando {avail_mem}% memoria libre''')
$ python cpu_mem_stats.py
Estado actual del PC:
La CPU está al [22.0, 1.0, 15.0, 1.0, 11.9, 0.0, 7.0, 0.0]%
Usando 4935 Mb de memoria
Quedando 28% memoria libre
Libros recomendados para aprender Python y shell
Estos son los libros que pueden ayudarte a aprender Python, aprender a programar, tipos de datos, algoritmia y mucho más.
Excelente enlace
Gracias ^_^