#!usr/bin/env Python # -*- coding: utf-8 -*- import os, sys import subprocess # Ejecutar un comando con "os.system(comando)" y mostrar en # pantalla la salida del comando y el resultado de la # ejecución. # Si su valor es 0 la ejecución finalizó con éxito. valor1 = os.system("whoami") print("Resultado:", valor1) # Ejecutar un comando "erróneo" con "os.system(comando)" valor2 = os.system("whoamix") print("Resultado:", valor2) # Ejecutar varios comandos con "os.system(comando)" comando3 = "ls -l | grep 'txt' >textos.txt" valor3 = os.system(comando3) print("Resultado:", valor3) # Ejecutar un comando con "os.popen(comando)" y capturar su # salida comando4 = "uname -srmo" salida4 = os.popen(comando4).read() print("Salida:\n", salida4) # A continuación, se muestran varios ejemplos con el módulo # "subprocess" que genera un nuevo proceso para ejecutar el # comando permitiendo controlar su ejecución y obtener su # salida y/o errores que pudieran darse. # Ejecutar un comando externo con "subprocess.call", mostrar # su salida y el resultado de su ejecución. valor5 = subprocess.call(["ping", "-c 6", "www.elpais.es"]) print("Este texto se mostrará después de ejecutar el comando") print("Resultado:", valor5) # Ejecutar un comando externo en paralelo con # "subprocess.Popen" con wait() se espera a que termine # la ejecución del subproceso # Todas las líneas de código delante de wait() se # ejecutarán en paralelo a la ejecución del comando. # También, se mostrará si la ejecución terminó o no # con éxito proceso6 = subprocess.Popen(['ls', '-lha']) for num in range(100): print ("Este texto se mostrará antes") valor6 = proceso6.wait() print ("Este texto se mostrará después") print ("Resultado:", valor6) # Ejecutar un comando externo en paralelo con # "subprocess.Popen" proceso7 = subprocess.Popen(['ls', '-lha']) for num in range(300): print ("Este texto se mostrará en paralelo") # Ejecutar un comando en paralelo con # "subprocess.Popen" y capturar su salida y # los errores que puedieran darse proceso8 = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) errores8 = proceso8.stderr.read() salida8 = proceso8.stdout.read() proceso8.stderr.close() proceso8.stdout.close() print("Salida de errores:\n") errores8 = errores8.decode(sys.getdefaultencoding()) print(errores8) salida8 = salida8.decode(sys.getdefaultencoding()) print("Salida del comando:\n") print(salida8) # Ejecutar un comando externo con "subprocess.Popen" y # obtener su salida y los errores que puedan darse (Otra # manera de hacerlo) # En el ejemplo se provoca un error y se muestra el texto # de su salida proceso9 = subprocess.Popen(["ping", "-zz 4", "www.elpais.es"], stdout=subprocess.PIPE) salida9, errores9 = proceso9.communicate() print(salida9.decode(sys.getdefaultencoding())) if errores9 != None: print(errores9.decode(sys.getdefaultencoding())) # Para resolver variables de entorno, patrones globales y # otras caracteristicas de la shell hay que incluir el # parámetro "shell = True" print("Correcto : subprocess.call('echo $HOME', shell=True)") print("Incorrecto: subprocess.call('echo $HOME')") # Es equivalente a shell = False subprocess.call('echo $HOME', shell=True) # Ejecutar un comando externo con subprocess.Popen() y # obtener su salida en tiempo real comando11 = "ping -c3 www.elpais.es" resultado11 = subprocess.Popen(comando11, shell=True, stdout=subprocess.PIPE) for salida11 in resultado11.stdout: print(salida11.decode(sys.getdefaultencoding()).rstrip()) # Ejecutar un comando externo con subprocess.Popen() # y obtener la salida en tiempo real (Otra forma de # hacerlo) comando12 = "ping -c2 www.elpais.es" resultado12 = subprocess.Popen(comando12, shell=True, stdout=subprocess.PIPE) while resultado12.poll() is None: salida12 = resultado12.stdout.readline() print(salida12.decode(sys.getdefaultencoding()).rstrip())
Ir al índice del tutorial de Python