Aprenda el flujo de control de Python y los bucles para escribir y sintonizar scripts de shell - Parte 2
- 1671
- 135
- Jaime Delgadillo
En el artículo anterior de esta serie de Python, compartimos una breve introducción a Pitón, su shell de línea de comandos y el inactivo.
También demostramos cómo realizar cálculos aritméticos, cómo almacenar valores en variables y cómo imprimir esos valores en la pantalla. Finalmente, explicamos los conceptos de métodos y propiedades en el contexto de la programación orientada a objetos a través de un ejemplo práctico.
En esta guía, discutiremos el flujo de control (para elegir diferentes cursos de acción dependiendo de la información ingresada por un usuario, el resultado de un cálculo o el valor actual de una variable) y bucles (para automatizar tareas repetitivas) y luego aplicar Lo que hemos aprendido hasta ahora para escribir un script de shell simple que mostrará el tipo de sistema operativo, el nombre de host, la versión del núcleo, la versión y el nombre del hardware de la máquina.
Este ejemplo, aunque básico, nos ayudará a ilustrar cómo podemos aprovechar Python OOPLas capacidades de escribir scripts de shell más fáciles que usar herramientas bash regulares.
En otras palabras, queremos ir de
# UNAME -SNRVMVerifique el nombre de host del Linux
a
Verifique el nombre de host de Linux usando el script de Pythono
Script para verificar la información del sistema LinuxSe ve bonito, ¿no?? Vamos a rodar nuestras mangas y hacer que suceda.
Tabla de contenido
1- Aprenda el flujo de control en Python
- Aprende bucles en Python
- Módulos de pitón
- Guión de pitón
- Resumen
Aprenda el flujo de control en Python
Como dijimos antes, flujo de control nos permite elegir diferentes resultados dependiendo de una condición dada. Su implementación más simple en Python es una si / else cláusula.
La sintaxis básica es:
Si la condición: # Acción 1 más: # Acción 2
- Cuando la condición se evalúa en verdad, el siguiente bloque de código se ejecutará (representado por
# Acción 1
. De lo contrario, el código debajo se ejecutará. - Una condición puede ser cualquier declaración que pueda evaluar como verdadera o falsa.
Por ejemplo:
1 < 3 # true firstName == "Gabriel" # true for me, false for anyone not named Gabriel
- En el primer ejemplo, comparamos dos valores para determinar si uno es mayor que el otro.
- En el segundo ejemplo comparamos nombre de pila (una variable) para determinar si, en el punto de ejecución actual, su valor es idéntico a "Gabriel"
- La condición y la declaración de lo contrario deben ser seguidas por un colon (:)
- La sangría es importante en Python. Las líneas con sangría idéntica se consideran en el mismo bloque de código.
Tenga en cuenta que el si / else La declaración es solo una de las muchas Herramientas de flujo de control Disponible en Python. Lo revisamos aquí, ya que lo usaremos en nuestro script más tarde. Puede obtener más información sobre el resto de las herramientas en los documentos oficiales.
Aprende bucles en Python
En pocas palabras, un bucle es una secuencia de instrucciones o declaraciones que se ejecutan en orden siempre que una condición sea verdadera, o una vez por elemento en una lista.
El bucle más simple en Python está representado por el en bucle que itera sobre los elementos de una lista dada o una cadena que comienza con el primer elemento y termina con el último.
Sintaxis básica:
para x en el ejemplo: # haz esto
Aquí el ejemplo puede ser una lista o una cadena. Si el primero, la variable nombró X representa cada elemento en la lista; Si el último, X representa cada personaje de la cadena:
>>> rockbands = [] >>> rockands.append ("Roxette") >>> Rockands.append ("Guns N 'Roses") >>> Rockands.append ("u2") >>> para x en rockbands: imprime (x) o >>> firstName = "gabriel" >>> para x en primer nombre: print (x)
La salida de los ejemplos anteriores se muestra en la siguiente imagen:
Aprende bucles en PythonMódulos de pitón
Por razones obvias, debe haber una manera de guardar una secuencia de instrucciones y declaraciones de Python en un archivo que se pueda invocar cuando sea necesario.
Eso es precisamente lo que es un módulo. Particularmente, el sistema operativo El módulo proporciona una interfaz al sistema operativo subyacente y nos permite realizar muchas de las operaciones que generalmente hacemos en una solicitud de línea de comandos.
Como tal, incorpora varios métodos y propiedades que se pueden llamar como explicamos en el artículo anterior. Sin embargo, necesitamos importarlo (o incluirlo) en nuestro entorno utilizando la palabra clave de importación:
>>> Importar sistema operativo
Imprimamos el directorio de trabajo actual:
>>> OS.getCwd ()Aprender módulos de pitón
Ahora armemos todo esto (junto con los conceptos discutidos en el artículo anterior) para escribir el guión deseado.
Guión de pitón
Se considera una buena práctica iniciar un script con una declaración que indique el propósito del script, los términos de la licencia bajo los cuales se publica y un historial de revisión que enumera los cambios que se han realizado. Aunque esto es más una preferencia personal, agrega un toque profesional a nuestro trabajo.
Aquí está el script que produce la salida que hemos mostrado en la parte superior de este artículo. Se comenta fuertemente para que puedas entender lo que está sucediendo.
Tómese unos minutos para pasar por él antes de continuar. Observe cómo usamos una estructura if / else para determinar si la longitud de cada título de campo es mayor que el valor del campo en sí.
Según el resultado, usamos caracteres vacíos para llenar el espacio entre un título de campo y el siguiente. Además, utilizamos el número correcto de guiones como separador entre el título de campo y su valor a continuación.
#!/usr/bin/python3 # cambia la línea anterior a #!/usr/bin/python si no tiene python 3 instalado # nombre del script: Uname.PY # Propósito: ilustrar las capacidades OOP de Python para escribir scripts de shell más fácilmente # Licencia: GPL V3 (http: // www.ñu.org/licencias/GPL.html) # Copyright (c) 2016 Gabriel Alejandro Cánepa # Facebook / Skype / G+ / Twitter / Github: Gacanepa # Correo electrónico: Gacanepa (AT) Gmail (Dot) com # Este programa es software gratuito: puede redistribuirlo y / o modificarlo # está bajo los términos de la Licencia Pública General de GNU publicada por # The Free Software Foundation, ya sea la versión 3 de la licencia, o # (a su opción) cualquier versión posterior. # Este programa se distribuye con la esperanza de que sea útil, # pero sin ninguna garantía; sin siquiera la garantía implícita de # comerciabilidad o aptitud para un propósito particular. Consulte la licencia pública general # GNU para más detalles. # Debería haber recibido una copia del # de la Licencia Pública General de GNU junto con este programa. Si no, ver . # Historial de revisión # Fecha Versión del autor Cambio Descripción # ---------- ------- -------------- # 2016-05-28 1.0 Gabriel Cánepa Versión inicial # Importar el módulo del sistema operativo Importar OS # Asignar la salida del sistema operativo.uname () a la variable SystemInfo # OS.Uname () Devuelve una tupla de 5 cuerdas (sysname, nodename, versión, versión, máquina) # documentación: https: // docs.pitón.org/3.2/biblioteca/sistema operativo.html#módulo-os systemInfo = OS.uname () # Esta es una matriz fija con los subtítulos deseados en los encabezados de salida del script = ["Sistema operativo", "Nombre de host", "Release", "Versión", "Máquina"] # Valor inicial de la variable de índice. Se utiliza para definir el índice # de SystemInfo y encabezados en cada paso de la iteración. índice = 0 # Valor inicial de la variable de subtítulos. subtítulos = "" # Valor inicial de los valores Valores variables = "" # Valor inicial de los Separadores Variable Separators = "" # Inicio del bucle para el elemento en SystemInfo: If Len (elemento) < len(headers[index]): # A string containing dashes to the length of item[index] or headers[index] # To repeat a character(s), enclose it within quotes followed # by the star sign (*) and the desired number of times. separators = separators + "-" * len(headers[index]) + " " caption = caption + headers[index] + " " values = values + systemInfo[index] + " " * (len(headers[index]) - len(item)) + " " else: separators = separators + "-" * len(item) + " " caption = caption + headers[index] + " " * (len(item) - len(headers[index]) + 1) values = values + item + " " # Increment the value of index by 1 index = index + 1 # End of the loop # Print the variable named caption converted to uppercase print(caption.upper()) # Print separators print(separators) # Print values (items in systemInfo) print(values) # INSTRUCTIONS: # 1) Save the script as uname.py (or another name of your choosing) and give it execute permissions: # chmod +x uname.py # 2) Execute it: # ./uname.py
Una vez que haya guardado el script anterior en un archivo, dale permisos de ejecución y ejecútelo como se indica en la parte inferior del código:
# chmod +x desanimado.py # ./tu nombre.py
Si recibe el siguiente error al intentar ejecutar el script:
-intento: ./tu nombre.py:/usr/bin/python3: intérprete malo: no hay dicho archivo o directorio
Significa que no tienes Python 3 instalado. Si ese es el caso, puede instalar el paquete o reemplazar la línea de intérprete (Preste especial atención y tenga mucho cuidado si siguió los pasos para actualizar los enlaces simbólicos a los binarios de Python como se describe en el artículo anterior)
#!/usr/bin/python3
con
#!/usr/bin/python
que causará la versión instalada de Python 2 para ejecutar el script en su lugar.
Nota: Este script ha sido probado con éxito tanto en Python 2.X y 3.X.
Aunque es algo rudimentario, puedes pensar en este guión como un módulo de Python. Esto significa que puede abrirlo en el ralentí (Archivo → Abierto ... → Seleccionar archivo)
Abra Python en inactivoSe abrirá una nueva ventana con el contenido del archivo. Luego ve a Ejecutar → Ejecutar módulo (o simplemente presione F5). La salida del script se mostrará en el shell original:
Ejecutar el guión de PythonSi desea obtener los mismos resultados con un script escrito puramente en Intento, Debería usar una combinación de AWK, SED y recurrir a métodos complejos para almacenar y recuperar elementos en una lista (sin mencionar el uso de TR para convertir letras minúsculas a mayúsculas).
Además, Pitón proporciona portabilidad en que todos los sistemas de Linux se envían con al menos una versión de Python (ya sea 2.X o 3.X, A veces ambos). Si necesita confiar en un shell para lograr el mismo objetivo, necesitaría escribir diferentes versiones del guión basadas en el shell.
Esto demuestra que las características de programación orientadas a objetos pueden convertirse en aliados fuertes de los administradores del sistema.
Nota: Puedes encontrar este guión de Python (y otros) en uno de mis repositorios de Github.
Resumen
En este artículo, hemos revisado los conceptos de flujo de control, bucles/iteración y módulos en Python. Hemos mostrado cómo aprovechar los métodos y propiedades de OOP en Python para simplificar los scripts de shell complejos.
¿Tiene alguna otra idea que le gustaría probar?? Continúe y escriba sus propios guiones de Python y háganos saber si tiene alguna pregunta. No dude en dejarnos una línea usando el formulario de comentarios a continuación, y nos pondremos en contacto con usted tan pronto como podamos.
- « Cómo administrar el servidor Apache utilizando la herramienta GUI Apache
- Comenzando con la programación de Python y las secuencias de comandos en Linux - Parte 1 »