[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