Чи є спосіб змінити PATH
змінну середовища незалежним від платформи способом за допомогою python?
Щось схоже на os.path.join()
?
Відповіді:
Ви повинні мати можливість модифікувати os.environ
.
Оскільки os.pathsep
символом є розділення різних шляхів, вам слід використовувати це для додавання кожного нового шляху:
os.environ["PATH"] += os.pathsep + path
або, якщо у списку є кілька шляхів для додавання:
os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
Як ви вже згадували, os.path.join
його також можна використовувати для кожного окремого шляху, який потрібно додати, якщо вам потрібно побудувати їх із окремих частин.
os.pathsep
я згадав (конкретно для PATH)?
os.path.sep != os.pathsep
.
Зверніть увагу, що os.environ
насправді це не словник. Це спеціальний схожий на словник об’єкт, який фактично встановлює змінні середовища в поточному процесі за допомогою setenv .
>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'
Це означає, що PATH
(та інші змінні середовища) будуть видимими для коду С, запущеного в тому ж процесі.
(Оскільки коментарі не можуть містити форматування, я повинен дати це у відповідь, але я відчуваю, що це важливий момент. Це справді коментар до коментаря щодо відсутності еквівалента "експорту" )
Застереження, яке слід пам’ятати щодо модифікації змінних середовища в Python, полягає в тому, що не існує еквівалента команди оболонки "export". Неможливо внести зміни в поточний процес, лише дочірні процеси.
os.system
, os.popen
або subprocess.Popen
повинні використовуватися в додатку Python для запуску інших процесів. Інакше це майже безглуздо.
export
змушує копіювати змінну в середовище всіх дочірніх процесів, але не впливає на батьківський процес.