¿Cómo ejecutar comandos de Shell con Python?

Sysadmin, forma abreviada de «Administrador del sistema», desempeña un papel vital en el departamento de TI de la empresa. A menudo cubren una amplia gama de soporte técnico. Por ejemplo, las tareas de un administrador de sistemas pueden variar desde la instalación e implementación de servidores hasta la resolución de problemas y el soporte técnico para proyectos.

Una cosa común, especialmente para un administrador de sistemas, es ejecutar comandos de shell. Las tareas de rutina, como la supervisión del estado del sistema, la copia de seguridad y la recuperación ante desastres, etc., se realizan mediante comandos de shell.

Recomendado: Conocías estos tipos de lenguaje de programación

La ejecución de los comandos de shell generalmente termina en un archivo por lotes o un archivo por lotes. Por suerte, también se puede hacer con Python.

Es razonable pensar: ¿Por qué usar python para el shell?

Las siguientes son algunas razones por las que es útil ejecutar comandos de shell con python:

  • Python tiene una interfaz fácil e interactiva para importar los módulos requeridos.
  • Si desea ejecutar cualquier archivo externo como .exe o cualquier aplicación, puede utilizar estos métodos.
  • Python les da a los desarrolladores más poder y control. Ayuda a automatizar el flujo de trabajo. El escaneo de disco, la eliminación de archivos de caché no deseados, la copia de seguridad, la recuperación y muchas tareas repetitivas que carecen de creatividad y productividad en la vida de un desarrollador se pueden implementar utilizando scripts de Python Shell.

Dado que python es potente y rápido, este artículo explicará diferentes formas de ejecutar comandos de shell con python.

¿Qué es Shell ?

Shell es un término, a menudo usado y mal entendido. En informática, un shell es un software que proporciona una interfaz para acceder a las funcionalidades del sistema operativo.

Un shell en el sistema operativo puede ser una GUI (interfaz gráfica de usuario) o una CLI (interfaz de línea de comandos) según la funcionalidad requerida y el funcionamiento del dispositivo.

En las ventanas, el como el infierno es un software que le permite interactuar con el sistema operativo mediante “línea de comando”, también conocido como un Terminal en Linux y Mac.

Puede abrir una línea de comando en Windows usando Windows+R » escriba cmd » Ingresar.

Python ofrece módulos convenientes para interactuar con el sistema operativo, por ejemplo

  • sistema operativo
  • plataforma
  • subproceso
  • lanzaderas
  • globo
  • sistema

Aquí verá cómo ejecutar comandos de shell con python utilizando los módulos y subprocesos del sistema operativo más utilizados.

MÓDULO SO

El enfoque ingenuo para ejecutar un comando de shell es usar os.system():

  • Hagamos un nuevo archivo de Python llamado shell_cmd.py o cualquier nombre de su elección.
  • En segundo lugar, en el archivo de Python, importe el módulo del sistema operativoen el que la función del sistema que ejecuta comandos de shell.
  • La función system() solo toma una cadena como argumento.
  • Escriba lo que quiera ver como salida o realice una acción.
  • Ejecute este archivo .py y debería ver el resultado correspondiente.
  • Ejecutar el código abrirá el símbolo del sistema, como se muestra a continuación.

Antes de continuar, veremos un ejemplo más de cómo ejecutar el comando de cambio de directorio (cd) usando python.

Código:

import os
#First, let's print the current working directory
print("Current Working Directory",os.getcwd())
#Now, let's change the directory
path="F:\Coding Ninjas"
os.chdir(path)
print("Changed to",os.getcwd())
  • os.getcwd(): devuelve el directorio de trabajo actual de un proceso.
  • sendero: Seleccione una ruta de directorio que desee abrir
  • os.chdir(ruta): cambia el directorio de trabajo actual a la ruta que pasa como argumento.

Módulo de subprocesos

  • el es subproceso Es el enfoque más versátil y el módulo recomendado para ejecutar comandos de shell con Python.
  • el es subproceso Un módulo le permite generar nuevos procesos.
  • Se conecta a las tuberías de entrada/salida/error del proceso y obtiene sus códigos de retorno.
  • Este módulo reemplaza algunos módulos y funciones más antiguos como os.system y os.spawn*.

Puede averiguar cómo el módulo de subproceso puede reemplazar módulos y funciones anteriores en la sección de reemplazo de subproceso de la documentación oficial de python.

Repasemos las funcionalidades en el módulo de subprocesos para ejecutar comandos de shell:

subproceso.ejecutar()

1. El enfoque recomendado para invocar subprocesos es usar el correr() función. Este método ejecuta un comando y devuelve una instancia de ‘Proceso completo’ una vez que se completa.

La siguiente sintaxis muestra la firma completa de la función run(), es decir, el número y tipos de argumentos que podemos ejecutar.

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)

Argumento: Esto puede ser una lista o una cadena.

Ejemplo de código python para imprimir la lista de archivos de directorio de trabajo actuales en Linux:

import subprocess

file1 = subprocess.run(["ls", "-l"])
print("The exit code was: %d" % file1.returncode)

Nota: Las partes resaltadas se explican por separado debajo de los códigos para brindarle una comprensión más clara.

  • ([“ls”, “-l”]): Este es un comando de Linux que garantiza información mínima y un archivo por línea para facilitar el procesamiento de nombres de archivo.
  • código de retorno: Esto indica el estado de salida del proceso hijo.

Un estado de salida de 0 indica que se ejecutó correctamente y cualquier otro número significa un error.

Ejecute el comando descrito en args. Espere a que se complete el comando, luego devuelva una instancia de CompletedProcess, es decir, el valor de retorno de run(), que indica un proceso completado.

2. Ahora, si desea proporcionar una entrada a un comando, subprocess.run() lo permite a través de su argumento de entrada.


import subprocess

input_file1 = subprocess.run(["ls"], stdout=subprocess.PIPE, text=True, input="Hello How are you?")
print(input_file1.stdout)
  • stdout=subproceso.PIPE: Esto apunta a subprocess.run() para redirigir la salida del comando a un objeto para leerlo manualmente más tarde.
  • salida estándar: Esto captura la salida del proceso hijo.
  • texto=Verdadero: Esto devuelve stdout y stderr como cadenas. El tipo de retorno predeterminado es bytes.
  • aporte: Este argumento permite pasar datos que deberían ser una cadena o Ninguno si no se envían datos al niño.

La función subprocess.run() nos brinda una amplia flexibilidad que os.system() no brinda al ejecutar comandos de shell.

subproceso.Popen()

Para funcionalidades más avanzadas, podemos explorar la clase subprocess.Popen(). La siguiente sintaxis muestra la firma completa de la función Popen(), es decir. número y tipos de argumentos que podemos pasar.

class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, group=None, extra_groups=None, user=None, umask=-1, encoding=None, errors=None, text=None)

Argumento puede ser una lista, una sola cadena o un objeto de ruta.

  • La clase Popen es responsable de manejar la creación y la gestión básica del proceso de ejecución.

El siguiente código de python imprimirá la porción stdout,stderr del subproceso:

import subprocess

process = subprocess.Popen(['ls', 'Hello How are you?'],
                     stdout=subprocess.PIPE, 
                     stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
stdout, stderr


Output:
(b'Hello How are you?\n', b'')
  • Comunicar(): Interactúa con el proceso y gestiona principalmente la entrada y la salida.
    • Enviar datos a stdin.
    • Lea datos de stdout y stderr hasta que se alcance el final del archivo.
    • Luego, espere a que finalice el proceso y establezca el atributo de código de retorno.
    • Finalmente, devuelve una tupla (stdout_data, stderr_data). Los datos serán cadenas si el archivo se abrió en modo texto; en caso contrario, medidas.

Ahora, probablemente no queramos esperar a que se complete todo el proceso, entonces. papa.agujero() entra en escena.

  • Si un comando ha terminado de ejecutarse, devuelve otro código de salida Nada si todavía se está ejecutando.

Ahora, después de explorar la idea básica detrás de estos módulos, debes estar pensando en las condiciones ideales para usar cada uno de ellos.

No te preocupes. La siguiente tabla muestra algunas diferencias para facilitar su decisión según el uso:

 os.systemsubproceso. corrersubproceso.Popen
Se requieren argumentos analizadosno
el orden permaneceno
Se comunica con stdin y stdoutno
Devolucionesvalor de retornoobjetoobjeto

Has entendido los conceptos básicos de los comandos de shell con python. Puede experimentar con varios otros comandos para automatizar tareas más complejas y ejecutar tareas externas. Por ahora, veamos algunas preguntas frecuentes sobre los comandos de shell con python.

Preguntas frecuentes

¿Podemos ejecutar un script de shell en Python?

Python permite ejecutar comandos de shell usando varios módulos como os, subprocess, sys, platform, etc.

¿Cómo puedo ejecutar un programa externo en Python?

Puede usar el módulo os.system y subprocess.run() para ejecutar un programa externo en python.

¿Cómo ejecuto python desde la línea de comando?

Abra un símbolo del sistema, escriba python y presione ENTRAR.

¿Cómo ejecuto un archivo python en cmd?

Después de abrir con éxito el símbolo del sistema, escriba la palabra cd y la ruta a su script o archivo python y presione Entrar. Luego escriba filename.py ahora presione Entrar nuevamente, ¡y listo! La pantalla mostrará la salida.

¿Python está esperando que os.system() termine?

Sí, os.system() espera a que se complete su proceso antes de regresar.

Aprende mas de programación:

Articulos relacionados python if

Aqui tienes mas tutoriales python:

Pyglet es una biblioteca multimedia para Python. Básicamente se utiliza para crear juegos y otras aplicaciones visualmente ricas. Funciona tanto ...
Al escribir el código de Python, es posible que se haya encontrado con una situación en la que desee que ...
Crear software es una tarea abrumadora. Para mejorar su software, su aplicación debe continuar funcionando en circunstancias imprevistas. Por ejemplo, ...
Una parte importante del programa consiste en jugar con los datos. Durante la ejecución de algunas tareas, pueden surgir situaciones ...
El uso de la aleatoriedad es una parte importante de la configuración y evaluación en Python y su implementación. En ...
Python tiene la reputación de ser un lenguaje fácil de leer y escribir. Tiene una excelente documentación y una comunidad ...