[Python-es] Subprocess imprimir salida en pantalla en un archivo

Arnau Sanchez pyarnau en gmail.com
Mie Feb 10 19:53:15 CET 2010


On 10/02/10 19:19, Jordi Funollet wrote:

> ¿Alguien tiene alguna sugerencia para resolverlo de forma pythonica? Lo que se
> me ocurre a mí ocuparía el triple de líneas de código.

Yo no veo nada malo en que el argumento comando sea una lista/tupla (de hecho 
cuando construyes el comando, ésta es una forma muy cómoda de poner los 
argumentos, ya que muchos suelen ser variables).

Pero una forma fácil de permitir una cadena es usar shlex.split():

command = 'ls "un fichero con espacios" otro2 otro3'
subprocess.Popen(shlex.split(command), ...)

---

Y ya que estamos enseñándonos los wrappers, éste es el que uso cuando necesito 
algo versátil (stdin + retcode/stdout/stderr):

def run(command, inputdata=None, **kwargs):
     default_kwargs = dict(stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     popen = subprocess.Popen(command, **dict(default_kwargs, **kwargs))
     outputdata, errdata = popen.communicate(inputdata)
     return popen.returncode, outputdata, errdata

print run(["ls", "-al", "/etc/services", "djkdkfjdf"])

-- 
Desarrollador freelance
http://www.arnau-sanchez.com



Más información sobre la lista de distribución Python-es