2012-07-05 12 views
8

Używam POPEN bo muszę env, tak:subprocess.call env var

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

Problemem jest Popen uruchamia komendę jako nowego wątku. Czy jest jakiś sposób, aby przekazać env do subprocess.call lub zapobiec utworzeniu nowego wątku przez Popen? Niż

+1

niepowiązane: 'Popen()' nie tworzy nowy wątek (tworzy nową * proces *). – jfs

Odpowiedz

17

Można użyć env z rozmowy w dokładnie taki sam sposób jak z popen:

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

Thanx, nie wiem, dlaczego nie próbowałem! Myślę, że nie mogłem znaleźć opcji. – AliBZ

+3

@AliBZ dokumentacja dla [subprocess.call] (https://docs.python.org/2/library/subprocess.html#subprocess.call) nie jest w tym punkcie jasna - jedyna wskazówka, że ​​inne argumenty słów kluczowych są obsługiwana jest malutka gwiazdka w 'subprocess.call (args, *, stdin = None, stdout = None, stderr = None, shell = False)' –

+3

@AliBZ: aby było jasne: 'subprocess.call (cmd)' jest po prostu 'subprocess.Popen (cmd) .wait()' tzn. możesz przekazać do 'call()' wszystkie argumenty, które możesz przekazać do 'Popen()'. – jfs