Cómo ejecutar comandos Unix en tus programas de Python

Unix es un sistema operativo que fue desarrollado allá por 1969 en AT&T Bell Labs por Ken Thompson y Dennis Ritchie. Existen muchísimos comandos de Unix muy interesantes que podemos utilizar para llevar a cabo distintas tareas. La cuestión es, ¿podemos usar dichos comandos directamente dentro de un programa de Python? Eso es lo que veremos en este tutorial.

El comando de Unix ls lista todos los archivos existentes en un directorio. Si escribes ls dentro de un script de Python, esto es lo que obtendrás al ejecutar el programa:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    ls
NameError: name 'ls' is not defined

Como ves, Python interpreta a ls como si fuera una variable, y por eso, requiere que se defina (es decir, que se inicialice). Es decir, no trata al comando ls como si fuese un comando de Unix.

os.system()

Una solución para llevar a cabo esto es utilizar os.system() del módulo os de Python. Como puedes ver en la documentación, os.system():

Ejecuta un comando (string) en un subshell. Esto se lleva a cabo llamando a la función system() de Standard C, y cuenta con las mismas limitaciones.

Por lo tanto, podemos ejecutar el comando ls de Unix tal que así:

import os
os.system('ls')

Esto devolverá el listado de ficheros de tu directorio actual, que es donde está localizado tu programa .py.

Vamos a ver otro ejemplo. Si quieres conocer la fecha y hora actual, puedes utilizar el comando date de Unix de este modo:

import os
os.system('date')

En mi caso, esto es lo que he obtenido al ejecutar el anterior script:

Sat Dec 3 11:29:56 CEST 2016

call()

Aunque os.system() funciona, no es muy recomendable utilizarla ya que se considera un poco antigua y obsoleta. Una solución más recomendable es la función call(args) del módulo subprocess de Python. Como se menciona en la documentación sobre esta función:

Ejecuta el comando descrito en sus argumentos. Espera a que se complete el comando, y después, devuelve el atributo returncode.

Si queremos ejecutar el comando de Unix ls utilizando este método, podemos hacer lo siguiente:

from subprocess import call
call('ls')

Ahora vamos a ver cómo obtener la fecha utilizando el módulo subprocess, pero esta vez vamos a hacer el ejemplo un pelín más interesante:

import subprocess 
time = subprocess.Popen('date', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = time.communicate()
print 'Son las ', output

El anterior ejemplo puede ser ejecutado utilizando simplemente check_output() tal que así:

import subprocess 
time = subprocess.check_output('date')
print 'Son las', time

La salida del anterior script es:

Son las Sat Dec 3 11:36:21 CEST 2016

Los ejemplos anteriores muestran la flexibilidad del uso de las diferentes funciones de subprocess y cómo podemos pasar los resultados a las distintas variables para llevar a cabo otras operaciones.

Como hemos visto en este tutorial, los comandos de Unix pueden ser llamados y ejecutados utilizando el módulo subprocess, que proporciona mucha flexibilidad al trabajar con comandos de Unix a través de sus diferentes funciones. Puedes obtener más información acerca de este módulo y sus diferentes funciones en la documentación oficial de Python.

Fuente: Abder-Rahman Ali

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP