Чи є спосіб змінити 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змушує копіювати змінну в середовище всіх дочірніх процесів, але не впливає на батьківський процес.