Existem duas maneiras de fazer o redirecionamento. Ambos se aplicam a subprocess.Popenou subprocess.call.
Defina o argumento da palavra-chave shell = Trueou executable = /path/to/the/shelle especifique o comando exatamente como você o possui.
Como você está apenas redirecionando a saída para um arquivo, defina o argumento de palavra-chave
stdout = an_open_writeable_file_object
onde o objeto aponta para o outputarquivo.
subprocess.Popené mais geral que subprocess.call.
Popennão bloqueia, permitindo que você interaja com o processo enquanto estiver em execução ou continue com outras coisas no seu programa Python. A chamada para Popenretorna um Popenobjeto.
call faz bloco. Embora ele suporte todos os mesmos argumentos do Popenconstrutor, para que você ainda possa definir a saída do processo, variáveis ambientais, etc., seu script aguarda a conclusão do programa e callretorna um código que representa o status de saída do processo.
returncode = call(*args, **kwargs)
é basicamente o mesmo que chamar
returncode = Popen(*args, **kwargs).wait()
callé apenas uma função de conveniência. Sua implementação no CPython está em 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 você pode ver, é um invólucro fino ao redor Popen.
call()parece ser muito clara. Você pode fornecer uma cotação ou um link para saber o que focar em uma resposta?