() translation by (you can also view the original English article)
Unix es un sistema operativo que fue desarrollado alrededor de 1969 por Ken Thompson y Dennis Ritchie en AT&T Bell Labs. Existen muchos comandos de Unix interesantes que podemos utilizar para llevar a cabo diferentes tareas. La pregunta es, ¿podemos usar tales comandos directamente dentro de un programa de Python? Esto es lo que te enseñaré en este tutorial.
El comando Unix ls
hace una lista de todos los archivos del directorio. Si pones ls
en un script de Python, esto es lo que obtendrás cuando ejecutes el programa:
1 |
Traceback (most recent call last): |
2 |
File "test.py", line 1, in <module> |
3 |
ls
|
4 |
NameError: name 'ls' is not defined |
Esto muestra que el intérprete de Python está tratando ls
como una variable y requiere que se defina (es decir, se inicialice), y no lo ha tratado como un comando de Unix.
os.system()
Una solución a este problema es utilizar os.system ()
del módulo os
de Python.
Como se menciona en la documentación, os.system()
:
Ejecuta el comando (una cadena o string) en una subshell. Esto se implementa llamando al Standard C function system(), y tiene las mismas limitaciones.
Así que, podemos ejecutar el comando ls
en Python de la siguiente forma:
1 |
import os |
2 |
os.system('ls') |
Esto devolverá la lista de archivos en tu directorio actual, que es donde se localiza tu programa .py
.
Veamos otro ejemplo. Si deseas devolver la fecha actual y la hora, puedes usar el comando date
de Unix del modo siguiente:
1 |
import os |
2 |
os.system('date') |
En mi caso, esto fue lo que obtuve como resultado del script anterior:
Tue May 24 17:29:20 CEST 2016
call()
A pesar de que os.system()
funciona, no se recomienda ya que se considera un poco viejo y obsoleto. Una solución más recomendable es la función call(args)
del módulo de subprocess
de Python. Como se señala en la documentación acerca de esta función:
Ejecuta el comando descrito por args. Espera a que el comando se complete, luego devuelve el atributo returncode.
Si queremos ejecutar el comando ls
de Unix utilizando este método, podemos hacer lo siguiente:
1 |
from subprocess import call |
2 |
call('ls') |
Veamos cómo podemos devolver la fecha utilizando el módulo subprocess
, pero hagamos que el ejemplo sea más interesante.
1 |
import subprocess |
2 |
time = subprocess.Popen('date', stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
3 |
output, err = time.communicate() |
4 |
print 'It is', output |
El ejemplo anterior se puede ejecutar de forma más simple usando check_output ()
, así:
1 |
import subprocess |
2 |
time = subprocess.check_output('date') |
3 |
print 'It is', time |
El resultado de los scripts anteriores es:
It is Tue May 24 19:14:22 CEST 2016
Los ejemplos anteriores muestran la flexibilidad al usar las diferentes funciones de subprocess
, y cómo podemos pasar los resultados a las variables para realizar más operaciones.
Conclusión
Como vimos en este tutorial, los comandos de Unix pueden ser llamados y ejecutados utilizando el módulo subprocess
, el cual ofrece mucha flexibilidad cuando se trabaja con comandos de Unix mediante sus diferentes funciones. Puedes aprender más sobre este módulo y sus diferentes funciones en la documentación de Python.