Prerrequisito: Introducción a Linux Shell y Shell Scripting
Linux es uno de los sistemas operativos más populares y es una opción común para los desarrolladores. Es popular porque es de código abierto, es gratuito y personalizable, es muy robusto y adaptable.
Un sistema operativo consta principalmente de dos partes: el kernel y el Shell. El kernel básicamente maneja la comunicación entre el software y el hardware. El shell toma entradas o comandos del usuario y produce una salida. La mayoría de las distribuciones de Linux hoy en día usan el shell BASH (Bourne back shell). Los comandos y scripts de Shell son muy potentes y los desarrolladores los usan comúnmente.
En este artículo, veremos cómo ejecutar y analizar comandos de Linux usando python.
Subproceso –
Subprocess es un módulo en Python que nos permite iniciar nuevas aplicaciones o procesos en Python. Este módulo pretende reemplazar varios módulos antiguos en python. Podemos usar este módulo para ejecutar otros programas o ejecutar comandos de Linux.
Iniciar un proceso –
Se puede generar un nuevo proceso utilizando la función Popen definida en el módulo de subproceso. Es un constructor de la clase Popen que toma argumentos para configurar el nuevo proceso. La creación y gestión de procesos subyacentes en este módulo está a cargo de la clase Popen.
Argumentos:
- El primer parámetro es una lista que contiene los comandos y sus opciones, si las hay.
ej:['ls', '-l']
el ejemplo anterior es equivalente a escribir ‘ls -l’ en la terminal- El segundo parámetro es el valor de salida estándar. especifica la salida estándar.
ej:stdout = subprocess.PIPE
Esto indica que se debe crear una nueva tubería o redirección. El valor predeterminado es
«Ninguno», lo que significa que no se producirá ninguna redirección.
Podemos recuperar la salida de un comando usando la función de comunicación . Lee datos de stdout y stderr hasta que llega al final del archivo y espera a que finalice el proceso. Devuelve una tupla que contiene los datos de salida y el error, si lo hubiera.
Sintaxis:
data = subprocess.Popen(['ls', '-l', filename], stdout = subprocess.PIPE)
output = data.communicate()
La salida del comando ejecutado se almacena en datos. Usando estas funciones, podemos ejecutar comandos de Linux y obtener su salida.
Listado de directorios –
Podemos usar el comando ‘ls’ con opciones como ‘-l’, ‘-al’, etc. para listar todos los archivos en el directorio actual. Luego podemos analizar esta salida e imprimirla en un formato presentable. La get_permissions()
función analiza la salida del comando list y recupera solo los nombres de los archivos y sus permisos correspondientes.
# importing libraries import subprocess import os # a function to list the files in # the current directory and # parse the output. def list_command(args = '-l'): # the ls command cmd = 'ls' # using the Popen function to execute the # command and store the result in temp. # it returns a tuple that contains the # data and the error if any. temp = subprocess.Popen([cmd, args], stdout = subprocess.PIPE) # we use the communicate function # to fetch the output output = str(temp.communicate()) # splitting the output so that # we can parse them line by line output = output.split("\n") output = output[0].split('\\') # a variable to store the output res = [] # iterate through the output # line by line for line in output: res.append(line) # print the output for i in range(1, len(res) - 1): print(res[i]) return res # parse the output of the ls # command and fetch the permissions # of the files and store them in # a text file . def get_permissions(): # get the output of the # list command res = list_command('-l') permissions = {} # iterate through all the rows # and retrieve the name of the file # and its permission. for i in range(1, len(res) - 1): line = res[i] line = line.split(' ') folder_name = line[len(line) - 1] permission_value = line[0] permissions[folder_name] = permission_value # create a directory called # outputs to store the output files try: os.mkdir('outputs') except: pass os.chdir('outputs') # open the output file out = open('permissions.txt', 'w') out.write('Folder Name Permissions\n\n') # write to the output file for folder in permissions: out.write(folder + ' : ' + permissions[folder] + '\n') os.chdir('..') return permissions if __name__ == '__main__': list_command('-al')
Producción :
Comando de ping –
El comando ping significa Packet Internet Groper. Se usa más comúnmente para verificar la conectividad entre dos sistemas o Nodes. Usando el comando ping, podemos verificar si la conexión entre un Node y otro es saludable o no. Intercambia paquetes de datos entre dos Nodes y también calcula el tiempo de ida y vuelta.
# importing libraries import subprocess import os # a function to ping given host def ping(host): # command is pong cmd = 'ping' # send two packets of data to the host # this is specified by '-c 2' in the # args list temp = subprocess.Popen([cmd, '-c 2', host], stdout = subprocess.PIPE) # get the output of ping output = str(temp.communicate()) output = output.split("\n") output = output[0].split('\\') # variable to store the result res = [] for line in output: res.append(line) # print the results print('ping results: ') print('\n'.join(res[len(res) - 3:len(res) - 1])) return res if __name__ == '__main__': # ping google ping('www.google.com')
Producción :
Cambiar permisos –
El chmod
comando se puede utilizar para cambiar los permisos de archivo. Es una abreviatura de modo de cambio. Más información se puede encontrar aquí
# importing libraries import subprocess import os # functio to change the permissions # of a given file def change_permissions(args, filename): # command name cmd = 'chmod' # getting the permissions of # the file before chmod ls = 'ls' data = subprocess.Popen([ls, '-l', filename], stdout = subprocess.PIPE) output = str(data.communicate()) print('file permissions before chmod % s: ' %(args)) print(output) # executing chmod on the specified file temp = subprocess.Popen([cmd, args, filename], stdout = subprocess.PIPE) # getting the permissions of the # file after chmod data = subprocess.Popen([ls, '-l', filename], stdout = subprocess.PIPE) output = str(data.communicate()) # printing the permissions after chmod print('file permissions after chmod % s: ' %(args)) print(output) if __name__ == '__main__': # changing the permissions of 'sample.txt' change_permissions('755', 'sample.txt')
Producción :
Publicación traducida automáticamente
Artículo escrito por Adith Bharadwaj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA