Esistono due modi per eseguire il reindirizzamento. Entrambi si applicano a subprocess.Popen
o subprocess.call
.
impostare la parola chiave argomento shell = True
o executable = /path/to/the/shell
e specificare il comando esattamente come lo avete lì.
Dal momento che si sta solo reindirizzare l'output in un file, impostare la parola chiave argomento
stdout = an_open_writeable_file_object
dove i punti oggetto al file output
.
subprocess.Popen
è più ampio di subprocess.call
.
Popen
non si blocca, consentendo di interagire con il processo mentre è in esecuzione, o continuare con altre cose nel programma Python. La chiamata a Popen
restituisce un oggetto Popen
.
call
fa blocco. Sebbene supporti tutti gli stessi argomenti del costruttore Popen
, così puoi ancora 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 che chiedono
returncode = Popen(*args, **kwargs).wait()
call
è solo una funzione di convenienza. E '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 si può vedere, si tratta di un involucro sottile intorno Popen
.
Quale parte della documentazione ti ha confuso? La definizione di 'call()' sembra essere molto chiara. Potete fornire un preventivo o un link in modo da sapere su cosa concentrarsi in una risposta? –