2011-07-11 16 views
48

Deseo obtener el resultado de algunos comandos de shell como ls o df en un script de python. Veo que commands.getoutput('ls') está en desuso, pero subprocess.call('ls') solo me proporcionará el código de retorno.python getoutput() equivalente en el subproceso

Espero que haya alguna solución simple.

Respuesta

70

Uso subprocess.Popen:

import subprocess 
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE) 
out, err = process.communicate() 
print(out) 

Nota que se comunican los bloques hasta que el proceso termina. Puede usar process.stdout.readline() si necesita la salida antes de que finalice. Para obtener más información, consulte el documentation.

+0

El enlace doc actual correcto para la versión Python 2.7 de 'ejemplos subprocess' es: http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the -subprocess-module; para Python 3.2, http://docs.python.org/py3k/library/subprocess.html#replacing-older-functions-with-the-subprocess-module –

+5

Probablemente necesite reemplazar el proceso subprocess.communicate(). comunicar() - también puede necesitar el código de salida del subproceso haciendo process.returncode – Cinquo

+0

No noté que había escrito un subproceso en lugar de un proceso. Fijo. –

Cuestiones relacionadas