Tutoriales

Cómo empezar a escribir scripts en Python

Python es uno de los lenguajes de desarrollo más ubicuos; los administradores de sistemas, los científicos de datos, los desarrolladores de software back-end y los desarrolladores web lo utilizan con frecuencia. Python tiene muchos casos de uso, y este tutorial explora cómo usarlo para crear secuencias de comandos de tareas comunes del administrador del sistema.

Este es el entorno utilizado en este tutorial. El sistema operativo es Red Hat Enterprise Linux 8, 4.18.0-348.12.2.el8_5.x86_64 y la versión de Python es python36-3.6.8-38.module+el8.5.0+12207+5c5719bc.x86_64. Su sistema no necesita ser una combinación perfecta; todo lo que necesita es alguna versión de Python que pueda ejecutar su código. Para descargar Python, puede usar los repositorios de su sistema operativo u obtener la última versión de Python.org.

Base

Comenzando con lo básico, aquí está el script Hello World en Python:

$ cat hello.py3
#!/usr/bin/python3
print("hello world!")
$ python3 hello.py3
hello world!
$ echo $?
0

la primera línea en hello.py3 Hay un tinglado (#) seguido de la ruta al archivo ejecutable de Python.

Comprobando el intérprete de Python rpm Herramienta de interfaz de línea de comandos (CLI). Esto muestra que el intérprete se basa en la versión 3.6:

$ rpm -qf /usr/bin/python3
python36-3.6.8-38.module+el8.5.0+12207+5c5719bc.x86_64
$ ll /usr/bin/python3
lrwxrwxrwx. 1 root root 25 Feb  3  2020 /usr/bin/python3 -> /etc/alternatives/python3

La segunda línea del script Hello World llama print funcion con parametros hello world! Imprimir es una función integrada de Python que permite a los usuarios imprimir mensajes en la línea de comandos. Esto es especialmente útil para la depuración dinámica. Una función es una pieza de código que puede volver a escribir directamente en su programa sin usarla cada vez que quiera usarla. Pronto nos sumergiremos en la creación de funciones personalizadas.

Después de ejecutar el script Hello World, verifique una salida limpia haciendo eco del código de retorno del comando anterior:

$ echo $?
0

Si hay un problema con el script, el código de retorno no será cero. Aprenderá a usar estos códigos de retorno en secuencias de comandos más adelante en este artículo.

[ Get more insight on automation by downloading the Red Hat Ansible Automation Platform 2 eBook. ]

función

Para un script un poco más avanzado, cree un archivo llamado greeting y pasarle tres parámetros. Las funciones son útiles cuando usará y reutilizará el mismo código. En lugar de reescribir todo el código cada vez, puede ponerlo en una función, a la que luego puede llamar cuando sea necesario:

$ cat func.py3
#!/usr/bin/python3

def greeting(fname,lname,state):
	print("Hello, %s %s! How is the weather in %s?" % (fname, lname, state))

first_name = "Peter"
last_name = "Gervase"
mystate = "North Carolina"

greeting(first_name, last_name, mystate)
$ python3 func.py3
Hello, Peter Gervase! How is the weather in North Carolina?

Dos cosas a tener en cuenta son que el orden en el que pasa las variables debe coincidir con lo que espera la función, y el número de variables pasadas debe coincidir con lo que espera la función.

Entonces, usa:

greeting(last_name, mystate, first_name)

hará la salida:

Hello, Gervase North Carolina! How is the weather in Peter?

Además, dado que esta función requiere tres variables, debe pasar tres variables. El script fallará si tiene menos o más de tres variables:

$ python3 func.py3
Traceback (most recent call last):
  File "func.py3", line 10, in 
	greeting(first_name, last_name)
TypeError: greeting() missing 1 required positional argument: 'state'

argumentos de línea de comando

Puede usar argumentos pasados ​​desde la línea de comando para scripts.Para este ejemplo, primero importe sys módulo para acceder a su contenido:

$ cat args.py3
#!/usr/bin/python3
import sys

print("you passed in", len(sys.argv), "argument(s)")
print("those arguments are: ", str(sys.argv))

print("hello", sys.argv[1])

$ python3 args.py3 Leah
you passed in 2 argument(s)
those arguments are:  ['args.py3', 'Leah']
hello Leah

Al igual que con el ejemplo de la función, debe pasar la cantidad de argumentos que espera el script.Si pasa muy poco, el script fallará porque no hay sys.argv[1]:

$ python3 args.py3
you passed in 1 argument(s)
those arguments are:  ['args.py3']
Traceback (most recent call last):
  File "args.py3", line 7, in 
	print("hello", sys.argv[1])
IndexError: list index out of range

Si pasa demasiado, está bien porque lo único que le importa al guión es sys.argv[1]:

$ python3 args.py3 foo bar baz
you passed in 4 argument(s)
those arguments are:  ['args.py3', 'foo', 'bar', 'baz']
hello foo

[ Learn more about 30 hidden gems in Python 3. ]

acceder a archivos

Python permite el acceso a los archivos. Primero, puede leer un archivo existente:

$ cat file.py3
#!/usr/bin/python3

f = open("text.txt")
print(f.read())
$ cat text.txt
this is in a text file
$ python3 file.py3
this is in a text file

curso

Las clases le permiten asignar múltiples propiedades a un solo objeto. Por ejemplo, considere cómo se podría usar una variable para almacenar información sobre un conjunto de libros. ¿Almacena datos en el siguiente formato: book1_title, book1_author, book2_title, etc? Esto se volverá rápidamente inmanejable.

Sería mucho mejor usar una clase para realizar un seguimiento de esa información. Puede describir un libro de varias maneras, incluido el título, el autor, la extensión y un resumen de lo que cubre el libro.Las clases le permiten construir un marco alrededor de los objetos que defina, como se muestra aquí para un ejemplo de una clase llamada book:

$ cat class.py3
class book:
	name = ""
	type = "book"
	author = ""
	pages = ""
	def description(self):
    	      desc = "%s is a %s written by %s. It has %.0f pages." % (self.name, self.type, self.author, self.pages)
    	return desc

book1 = book()
book1.type = "studying book"
book1.name = "Game Theory 101"
book1.author = "William Spaniel"
book1.pages = 270
book2 = book()
book2.name = "The C Programming Language"
book2.author = "Brian Kernighan and Dennis Ritchie"
book2.pages = 272
book3 = book()
book3.type = "comic book"
book3.name = "The Days Are Just Packed"
book3.author = "Bill Watterson"
book3.pages = 175

print(book1.description())
print(book2.description())
print(book3.description())

Cuando se ejecuta el código, recibe el siguiente resultado:

$ python3 class.py3
Game Theory 101 is a studying book written by William Spaniel. It has 270 pages.
The C Programming Language is a book written by Brian Kernighan and Dennis Ritchie. It has 272 pages.
The Days Are Just Packed is a comic book written by Bill Watterson. It has 175 pages.

al crear un book, puede agrupar todo el contenido de libro1, libro2 y libro3. Hay varios elementos para señalar de este ejemplo.Primero, tenga en cuenta que al libro2 nunca se le asigna un tipo específico de libro, por lo que usa el valor book De la información de clase predeterminada como su descripción.En segundo lugar, tenga en cuenta que esto utiliza %.0f por el número de páginas.si solo usas %f Para números, la salida tendrá seis ceros después del punto decimal. Por ejemplo, el primer libro tendrá 270.000000 páginas.

subclase

Puede usar los métodos de subclase de Python para ampliar las clases. Al incluir objetos que la nueva clase hereda en la definición de clase, puede pasar propiedades existentes y definir nuevas propiedades específicas para la clase de extensión.puedes extender la clase book en múltiples subclases.Por ejemplo, defina un Magazine:

# Definition of the subclass
# Inherits from book
class Magazine(book)
	edition=””
	volume=””
	url=””
	category=””
	# Extend the description method from class book
def description(self):  
# Define a new method to retrieve the category of the magazine
def getCategory():
	return magazine.category

Lazo

Python admite el uso while, fory otros métodos de gestión del control de flujo. Puede obtener más información en la documentación de Python. Los bucles le permiten repetir pasos en función de un número fijo de veces hasta que se cumpla o deje de cumplirse una condición.Aquí hay un ejemplo de uso while:

$ cat while.py3
#!/usr/bin/python3

i = 5

while (i > 0):
	print("the value of 'i' is: ", i)
	i = i - 1

$ python3 while.py3
the value of 'i' is:  5
the value of 'i' is:  4
the value of 'i' is:  3
the value of 'i' is:  2
the value of 'i' is:  1

formación

¿Qué harías si tuvieras un conjunto de valores interrelacionados? Para este caso, es posible que deba usar una matriz. Por ejemplo, si tiene una lista de autos que posee, puede almacenarlos como una matriz:

mycars = ["Ford", "Chrysler", "Pontiac"]

O, si desea realizar un seguimiento de los puntajes de las pruebas de su escuela, puede:

mygrades=[100,93,88,95,85,99,100,78]

Para agregar a una matriz, use:

mygrades.append(100)

Un programa de ejemplo podría ser:

#!/usr/bin/python3
mygrades=[100,93,88,95,85,99,100,78]
print(mygrades)
mygrades.append(100)
print(mygrades)
average = sum(mygrades) / len(mygrades)
print("the average score is %.2f" % (average))

$ python3 array.py3
[100, 93, 88, 95, 85, 99, 100, 78]
[100, 93, 88, 95, 85, 99, 100, 78, 100]
the average score is 93.11

Para un ejemplo más complejo, junte las secciones anteriores. El script lee los nombres de dominio de un archivo de entrada y luego llama a una función para verificar si se puede hacer ping a esos dominios. Esto usa una función leída de un archivo, usa comandos del sistema y reacciona al código de retorno de la función. Aquí está el guión:

$ cat status.py3
#!/usr/bin/python3

import os

########################
# This script will check the status of various websites
# This could be used to verify your internet connection
# or to check if your internal servers are functioning.
#######################

def ping(mysite):
    myping = ("ping -q -c 1 %s > /dev/null" % mysite)
    status = os.system(myping)
    return(status)

with open("sites.txt") as file:
    mysites = file.readlines()

for site in mysites:
    mystatus = ping(site.strip())
    if mystatus == 0:
   	 print(site.strip() + " is fine")
    if mystatus != 0:
   	 print("********************")
   	 print("vvvvvvvvvvvvvvvvvvvv")
   	 print("%s is down!" % (site.strip()))
   	 print("^^^^^^^^^^^^^^^^^^^^")
   	 print("********************")
    print("-----------")


$ python3 status.py3
www.google.com is fine
-----------
www.pitt.edu is fine
-----------
www.redhat.com is fine
-----------
ping: www.this-is-to-simulate-a-broken-site.com: Name or service not known
********************
vvvvvvvvvvvvvvvvvvvv
www.this-is-to-simulate-a-broken-site.com is down!
^^^^^^^^^^^^^^^^^^^^
********************

entender más

Para seguir aprendiendo más sobre Python (o cualquier lenguaje de programación), proponga un proyecto divertido para usarlo. Aquí hay dos sugerencias:

  • Tal vez usted es el entrenador de su equipo local de fútbol juvenil y necesita enviar recordatorios semanales sobre los próximos juegos. Puede poner fechas, campos, horas y oponentes en un archivo CSV, luego usar Python para analizar el archivo CSV, encontrar entradas que coincidan con la fecha correcta y enviar un correo electrónico a sus compañeros de equipo con la información adecuada.
  • Tal vez cada mañana tengas que conectarte a tu VPN de trabajo. Podría escribir una secuencia de comandos de Python que primero verifique que tiene una conexión de red, detenga cualquier conexión VPN anterior, inicie una nueva VPN, obtenga un nuevo ticket de Kerberos y luego se conecte a un servidor IRC.

Incluso podrías querer usar Python para hacer videojuegos. Sea cual sea el proyecto de estudio que decidas hacer, si lo haces significativo y agradable, será más probable que lo completes.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba