Se você deseja gravar a saída em um arquivo, pode usar o argumento- padrão de subprocess.call
.
É preciso None
,subprocess.PIPE
um objeto de arquivo ou um descritor de arquivo. O primeiro é o padrão, stdout é herdado do pai (seu script). O segundo permite que você passe de um comando / processo para outro. A terceira e a quarta são o que você deseja, que a saída seja gravada em um arquivo.
Você precisa abrir um arquivo com algo semelhante open
e passar o objeto ou o descritor inteiro do arquivo para call
:
f = open("blah.txt", "w")
subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
Estou supondo que qualquer objeto válido do tipo arquivo funcionaria, como um soquete (suspiro :)), mas nunca tentei.
Como marcog menciona nos comentários, você pode querer redirecionar stderr também, você pode redirecionar isso para o mesmo local que stdout com stderr=subprocess.STDOUT
. Qualquer um dos valores mencionados acima também funciona, você pode redirecionar para lugares diferentes.
subprocess.call(["echo", "1", ">>", "t.txt"], shell=True)
deve funcionar.shlex.quote
verifique se você está passando dados possivelmente sujos para um subshell.with open("blah.txt","w") as f: subprocess.call(["/home/myuser/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], stdout=f)
@SkurmedelAs opções para
popen
podem ser usadas emcall
Assim...
Então você pode fazer o que quiser com
myoutput
(o que precisa ser um arquivo, aliás).Além disso, você pode fazer algo mais próximo de uma saída canalizada como esta.
seria:
Há muitas informações úteis e adoráveis na página de manual do python .
fonte