2014-11-05 2 views
3

Я написал сценарий, который проверяет директории с пути и удаляет недоступные директории. Также я использовал фрагмент, чтобы запустить мой скрипт в качестве администратора. Но когда я проверяю свой Путь после выполнения скрипта - все равно.Изменение переменных окружения из сценария Python

import os 
import sys 
import win32com.shell.shell as shell 

if __name__ == "__main__": 

    if os.name != 'nt': 
     raise RuntimeError("This script is implemented only for Windows") 

    ASADMIN = 'asadmin' 

    if sys.argv[-1] != ASADMIN: 
     script = os.path.abspath(sys.argv[0]) 
     params = ' '.join([script] + sys.argv[1:] + [ASADMIN]) 
     shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params) 
     print("I am root now") 

    paths = os.environ.get('Path').split(';') 
    accessible_paths = [] 
    for path in paths: 
     if os.access(path, os.R_OK): 
      accessible_paths.append(path) 

    new_path = ';'.join(accessible_paths) 
    os.environ['Path'] = new_path 

    print(new_path) 
    print(new_path == os.environ['Path']) 

Итак, как я могу изменить переменную среды с помощью скрипта Python?

+0

Начальные переменные системной среды загружаются диспетчером сеансов (smss.exe) из раздела реестра HKLM \ System \ CurrentControlSet \ Control \ Session Manager \ Environment'. winlogon.exe также объединяет пользовательский 'PATH', который загружается из ключа' HKCU \ Environment' пользователя. – eryksun

ответ

0

Согласно documentation, настройка переменных окружения, как вы это делаете, вызывает os.putenv(), но описание этой функции неясно. В самом деле, сказано следующее:

Такие изменения в окружающей среде влияют на подпроцессы, начинающиеся с os.system(), popen() или fork() и execv().

Поэтому я не уверен, что os.environ предназначен для того, чтобы делать то, что вы ожидаете. Это несколько подтверждается the following question, где ответ только указывает на то, что это изменение будет зависеть от процессов детей ...

Смежные вопросы