2009-11-05 9 views

Odpowiedz

110

Powinieneś być w stanie zmodyfikować os.environ.

Od os.pathsep to znak, aby oddzielić różne ścieżki, należy to wykorzystać, aby dołączyć każdą nową ścieżkę:

os.environ["PATH"] += os.pathsep + path 

lub, jeśli istnieje kilka ścieżek, aby dodać do wykazu:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist) 

Tak jak wspomniałeś, os.path.join może być również użyty dla każdej ścieżki, którą musisz dołączyć w przypadku, gdy musisz je zbudować z oddzielnych części.

+0

Co z separatorami środowiskowej PATH ? ? linux -/usr/bin:/lib: ":" Windows - C: \ asdf \; C: \ Prog ...; ";" – bua

+2

@bua: masz na myśli 'osepathsep', o którym wspomniałem (specyficzne dla PATH)? – RedGlyph

+0

Dzięki, to właśnie tego szukałem. – resi

6

Ostrożność, o której należy pamiętać podczas modyfikowania zmiennych środowiskowych w Pythonie, polega na tym, że nie ma odpowiednika polecenia powłoki "export". Nie ma możliwości wprowadzania zmian w bieżącym procesie, tylko procesy potomne.

+0

+1: Wise to wskazać, polecenia takie jak 'os.system',' os.popen' lub 'subprocess.Popen' powinny być następnie użyte z aplikacji Python do uruchamiania innych procesów. W przeciwnym razie jest to bezsensowne. – RedGlyph

+8

To nie jest prawda. – Glyph

+3

Wyjaśnienie stwierdzeń Glypha: nie jest to prawdą, ponieważ zmiany * są * wprowadzane do bieżącego procesu (który jest procesem Pythona). OP najprawdopodobniej oznacza, że ​​nie ma możliwości wstrzyknięcia zmian do procesu nadrzędnego (zazwyczaj jest to powłoka, z której został wykonany skrypt Pythona). – PonyEars

14

Należy pamiętać, że os.environ w rzeczywistości nie jest słownikiem. Jest to specjalny słownik - obiekt , taki jak, który w rzeczywistości ustawia zmienne środowiskowe w bieżącym procesie przy użyciu setenv.

>>> os.environ.__class__ 
<class os._Environ at 0x100472050> 
>>> import os 
>>> os.environ["HELLO"] = "WORLD" 
>>> os.getenv("HELLO") 
'WORLD' 

Oznacza to, że PATH (i inne zmienne) będzie widoczne uruchamiać kod C, w tym samym procesie.

(Ponieważ komentarze nie mogą zawierać formatowania, muszę umieścić to w odpowiedzi, ale czuję, że jest to ważny punkt zrobić. To jest naprawdę komentarz na the comment about there being no equivalent to 'export'.)