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.
Te esperamos en los próximos artículos en donde hablaremos mas acerca de estos temas que hoy en día son de importancia e interés en el mundo de la tecnología.