Existem duas maneiras de fazer o redirecionamento. Ambos se aplicam a subprocess.Popen
ou subprocess.call
.
Defina o argumento da palavra-chave shell = True
ou executable = /path/to/the/shell
e 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 output
arquivo.
subprocess.Popen
é mais geral que subprocess.call
.
Popen
nã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 Popen
retorna um Popen
objeto.
call
faz bloco. Embora ele suporte todos os mesmos argumentos do Popen
construtor, para que você ainda possa definir a saída do processo, variáveis ambientais, etc., seu script aguarda a conclusão do programa e call
retorna 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?