Czy istnieje sposób na zmodyfikowanie PATH
zmiennej środowiskowej w sposób niezależny od platformy przy użyciu Pythona?
Coś podobnego do os.path.join()
?
Czy istnieje sposób na zmodyfikowanie PATH
zmiennej środowiskowej w sposób niezależny od platformy przy użyciu Pythona?
Coś podobnego do os.path.join()
?
Powinieneś móc modyfikować os.environ
.
Ponieważ os.pathsep
jest to znak oddzielający różne ścieżki, powinieneś użyć tego, aby dołączyć każdą nową ścieżkę:
os.environ["PATH"] += os.pathsep + path
lub, jeśli istnieje kilka ścieżek do dodania na liście:
os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
Jak wspomniałeś, os.path.join
może być również używany dla każdej indywidualnej ścieżki, którą musisz dołączyć, w przypadku, gdy musisz je zbudować z oddzielnych części.
os.pathsep
wspomniane przeze mnie (specyficzne dla PATH)?os.path.sep != os.pathsep
.Należy pamiętać, że w
os.environ
rzeczywistości nie jest to słownik. Jest to specjalny obiekt podobny do słownika, który faktycznie ustawia zmienne środowiskowe w bieżącym procesie za pomocą 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 środowiskowe) będą widoczne dla kodu C uruchamianego w tym samym procesie.(Ponieważ komentarze nie mogą zawierać formatowania, muszę umieścić to w odpowiedzi, ale czuję, że jest to ważna kwestia. To jest tak naprawdę komentarz dotyczący komentarza, że nie ma odpowiednika „eksportu” ).
źródło
Zastrzeżenie, o którym należy pamiętać podczas modyfikowania zmiennych środowiskowych w Pythonie, polega na tym, że nie ma odpowiednika polecenia powłoki „eksport”. Nie ma możliwości wprowadzania zmian do bieżącego procesu, tylko procesy potomne.
źródło
os.system
,os.popen
czysubprocess.Popen
powinny być następnie wykorzystane z aplikacji Pythona do uruchomienia innych procesów. W przeciwnym razie jest to bezcelowe.export
powoduje skopiowanie zmiennej do środowiska wszystkich procesów potomnych , ale nie ma wpływu na proces nadrzędny.