Scripts en Python

scripting 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:

  1. 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 .
  2. 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.


Compartir

2 respuestas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Oscar Ramirez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento: No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a ionos (1&1) que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Publicar un comentario

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para fines de afiliación y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver Política de cookies
Privacidad