2012-07-05 6 views
8

sto usando Popen perché ho bisogno della ENV, in questo modo:subprocess.call env var

Popen(
    ["boto-rsync", "..."], 
    env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"}, 
    ) 

Il problema è Popen esegue il comando come un nuovo thread. C'è un modo per passare il env a subprocess.call o impedire Popen di creare un nuovo thread? Thanx

+1

estranei: 'Popen()' non crea un nuovo thread (crea una nuova * processo *). – jfs

risposta

17

È possibile utilizzare env con la chiamata esattamente allo stesso modo con popen:

subprocess.call(
    ["boto-rsync", "..."], 
    env={"PATH":"/Library/Frameworks/Python.framework/Versions/2.7/bin/"}, 
    ) 
+0

Grazie, non so perché non l'ho provato! Penso di non essere riuscito a trovare l'opzione. – AliBZ

+3

@AliBZ la documentazione per [subprocess.call] (https://docs.python.org/2/library/subprocess.html#subprocess.call) non è chiara su questo punto - l'unica indicazione che altri argomenti di parole chiave sono supportato è il piccolo asterisco in 'subprocess.call (args, *, stdin = None, stdout = None, stderr = None, shell = False)' –

+3

@AliBZ: per essere chiari: 'subprocess.call (cmd)' è solo 'subprocess.Popen (cmd) .wait()' cioè, puoi passare a 'call()' tutti gli argomenti che puoi passare a 'Popen()'. – jfs