Ejecutando comandos de sistema en Python con getstatusoutput()

python

Muy comúnmente, dentro de nuestros scripts en Python, habremos de ejecutar comandos de sistema, ya sea por facilidad/comodidad o por necesidad. Sea cuál sea la razón, ejecutar un comando de sistema es realmente sencillo a través de getstatusoutput() del módulo commands.

Obsoleto como tal en el módulo commands desde versión 2.6 de Python pero instanciado ahora hacia el módulo subprocess, se presenta como una opción al momento de ejecutar comandos de sistema en nuestra plataforma Linux: getstatusout(). Qué como su nombre y la introducción de este artículo indican, nos ayuda a ejecutar y obtener el resultado de un comando de sistema pasado por parámetro. Su sintaxis:

commands.getstatusoutput(cmd)

Dicha ejecución retornará una tupla con el status del resultado (0 si se ejecutó correctamente o algún otro valor para error) y una cadena de texto si el comando produjo salida. Mejor, un ejemplo.

import commands
res = commands.getstatusoutput('ls')
print res

Nos daría la siguiente salida:

(0, 'script.py')

El comando ls nos lista el contenido del directorio, y éste contiene un solo archivo llamado script.py. En nuestro sistema Linux, ésto no representa un error de ejecución. Para ejemplificar una salida de tipo error:

import commands
res = commands.getstatusoutput('ls pako.txt')
print res

Salida:

(512, 'ls: no se puede acceder a pako.txt: No existe el fichero o el directorio')

Se obtiene un error de tipo 512, con la leyenda “ls: no se puede acceder a pako.txt: No existe el fichero o el directorio”.

Dado que el resultado es una tupla, perfectamente podríamos acceder a cualquiera de sus dos valores como si de un array se tratase, con sus respectivos índices. Considerando el script para obtener un error:

import commands
res = commands.getstatusoutput('ls pako.txt')
if res[0] == 0:
 print res[1]
else:
 print "Error: "+ str(res[0])
 print "Descripcion: " + res[1]

Salida:

Error: 512
Descripcion: ls: no se puede acceder a pako.txt: No existe el fichero o el directorio

Si ésto no es una maravilla, entonces díganme que es !!!

 

Facebook Twitter Email

Entradas relacionadas

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *