Сценарий Python может постоянно изменять переменную среды Windows? (изящно)

Как сказал @Artur, вы должны либо отключить, либо включить каждое расширение по рабочему пространству. Не самое элегантное из решений.

Лучшие решения запрашивались несколько раз, см. настройки рабочего пространства для списков расширений и постоянная загрузка расширений с файлом манифеста . Эта особенность кажется желанной, но никаких реальных признаков движения по этому вопросу, кроме того, что сказал Артур, нет.

9
задан Community 23 May 2017 в 12:22
поделиться

4 ответа

Вашим многоречивым решением является, вероятно, лучшая идея; я не полагаю, что это возможно из Python непосредственно. Эта статья предлагает иначе, с помощью временного пакетного файла:

http://code.activestate.com/recipes/159462/

1
ответ дан 4 December 2019 в 14:32
поделиться

Вы могли бы хотеть попробовать Расширения Python Win32, разработанные Mark Hammond, который включен в ActivePython (или может быть установлен отдельно). Можно изучить, как выполнить много связанных с Windows задач в книге Hammond и Robinson.

Используя PyWin32 для доступа к COM-объектам окон программа Python может использовать Свойство Среды WScript.Shell объект - набор переменных среды.

5
ответ дан 4 December 2019 в 14:32
поделиться

Windows устанавливает Переменные среды от значений, сохраненных в Реестре для каждого процесса независимо.

Однако существует инструмент в Инструментах Поддержки Windows XP Service Pack 2 под названием setx.exe, который позволяет Вам изменять глобальные Переменные среды из командной строки.

3
ответ дан 4 December 2019 в 14:32
поделиться

Мое решение с помощью win32api:

import os, sys, win32api, win32con
'''Usage: appendenv.py envvar data_to_append'''
def getenv_system(varname, default=None):
    '''
    Author: Denis Barmenkov <barmenkov at bpc.ru>

    Copyright: this code is free, but if you want to use it, 
               please keep this multiline comment along with function source. 
               Thank you.

    2006-01-28 15:30
    '''
    v = default
    try:
        rkey = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment')
        try:
            v = str(win32api.RegQueryValueEx(rkey, varname)[0])
            v = win32api.ExpandEnvironmentStrings(v)
        except:
            pass
    finally:
        win32api.RegCloseKey(rkey)
    return v

#My set function
def setenv_system(varname, value):
    try:
        rkey = win32api.RegOpenKeyEx(win32con.HKEY_LOCAL_MACHINE, 'SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment',0 ,win32con.KEY_WRITE)
        try:
            win32api.RegSetValueEx(rkey, varname, 0, win32con.REG_SZ, value)
            return True
        except Exception, (error):
            pass
    finally:
        win32api.RegCloseKey(rkey)
    return False

if len(sys.argv) == 3:
    value = getenv_system(sys.argv[1])
    if value:
        setenv_system(sys.argv[1],value + ";" + sys.argv[2])
        print "OK! %s = %s" % (sys.argv[1], getenv_system(sys.argv[1]))
    else:
        print "ERROR: No such environment variable. (%s)" % sys.argv[1]
else:
    print "Usage: appendenv.py envvar data_to_append"
3
ответ дан 4 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: