Hay dos formas de hacer la redirección. Ambos se aplican a cualquiera subprocess.Popen
o subprocess.call
.
Establecer el argumento de palabra clave shell = True
o executable = /path/to/the/shell
y especificar el comando del mismo modo que lo tienes ahí.
Como solo está redirigiendo la salida a un archivo, establezca el argumento de la palabra clave
stdout = an_open_writeable_file_object
donde el objeto apunta al output
archivo.
subprocess.Popen
es más general que subprocess.call
.
Popen
no se bloquea, lo que le permite interactuar con el proceso mientras se está ejecutando o continuar con otras cosas en su programa Python. La llamada a Popen
devuelve un Popen
objeto.
call
hace bloque. Si bien admite todos los mismos argumentos que el Popen
constructor, por lo que aún puede configurar la salida del proceso, las variables ambientales, etc., su script espera a que se complete el programa y call
devuelve un código que representa el estado de salida del proceso.
returncode = call(*args, **kwargs)
es básicamente lo mismo que llamar
returncode = Popen(*args, **kwargs).wait()
call
Es solo una función de conveniencia. Su implementación en CPython está en subprocess.py :
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
Como puede ver, es una envoltura delgada Popen
.
call()
parece ser muy clara. ¿Puede proporcionar una cotización o un enlace para que sepamos en qué centrarnos en una respuesta?