Czy istnieje sposób modyfikacji zmiennej środowiskowej PATH
w sposób niezależny od platformy za pomocą pythona?Python: niezależny od platformy sposób modyfikowania zmiennej środowiskowej PATH
Coś podobnego do os.path.join()
?
Czy istnieje sposób modyfikacji zmiennej środowiskowej PATH
w sposób niezależny od platformy za pomocą pythona?Python: niezależny od platformy sposób modyfikowania zmiennej środowiskowej PATH
Coś podobnego do os.path.join()
?
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.
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.
+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
To nie jest prawda. – Glyph
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
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'.)
Co z separatorami środowiskowej PATH ? ? linux -/usr/bin:/lib: ":" Windows - C: \ asdf \; C: \ Prog ...; ";" – bua
@bua: masz na myśli 'osepathsep', o którym wspomniałem (specyficzne dla PATH)? – RedGlyph
Dzięki, to właśnie tego szukałem. – resi