Esistono due modi per eseguire il reindirizzamento. Entrambi si applicano a uno subprocess.Popen
o subprocess.call
.
Imposta l'argomento della parola chiave shell = True
o executable = /path/to/the/shell
e specifica il comando così come lo hai lì.
Poiché stai semplicemente reindirizzando l'output su un file, imposta l'argomento della parola chiave
stdout = an_open_writeable_file_object
dove l'oggetto punta al output
file.
subprocess.Popen
è più generale di subprocess.call
.
Popen
non si blocca, consentendoti di interagire con il processo mentre è in esecuzione o di continuare con altre cose nel tuo programma Python. La chiamata a Popen
restituisce un Popen
oggetto.
call
fa blocco. Mentre supporta tutti gli stessi argomenti del Popen
costruttore, quindi è ancora possibile impostare l'output del processo, le variabili ambientali, ecc., Lo script attende il completamento del programma e call
restituisce un codice che rappresenta lo stato di uscita del processo.
returncode = call(*args, **kwargs)
è fondamentalmente lo stesso di chiamare
returncode = Popen(*args, **kwargs).wait()
call
è solo una funzione di convenienza. La sua implementazione in CPython è in 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
Come puoi vedere, è un involucro sottile in giro Popen
.
call()
sembra essere molto chiara. Puoi fornire un preventivo o un link in modo da sapere su cosa concentrarci in una risposta?