• Как используя Python изменить системную переменную %PATH% (windows)?

    vbloodv
    @vbloodv Автор вопроса
    Программист С++
    Очень лаконичное решение, то которое нашел я гораздо тяжелее, спасибо !
    # -*- coding: utf-8 -*-
    import sys
    from subprocess import check_call
    
    if sys.hexversion > 0x03000000:
        import winreg
    else:
        import _winreg as winreg
    
    
    class Win32Environment:
        """Utility class to get/set windows environment variable"""
    
        def __init__(self, scope):
            assert scope in ('user', 'system')
            self.scope = scope
            if scope == 'user':
                self.root = winreg.HKEY_CURRENT_USER
                self.subkey = 'Environment'
            else:
                self.root = winreg.HKEY_LOCAL_MACHINE
                self.subkey = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
    
        def getenv(self, name):
            key = winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_READ)
            try:
                value, _ = winreg.QueryValueEx(key, name)
            except WindowsError:
                value = ''
            return value
    
        def setenv(self, name, value):
            # Note: for 'system' scope, you must run this as Administrator
            key = winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_ALL_ACCESS)
            winreg.SetValueEx(key, name, 0, winreg.REG_EXPAND_SZ, value)
            winreg.CloseKey(key)
            # For some strange reason, calling SendMessage from the current process
            # doesn't propagate environment changes at all.
            # TODO: handle CalledProcessError (for assert)
            check_call('''\
    "%s" -c "import win32api, win32con; assert win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SETTINGCHANGE, 0, 'Environment')"''' % sys.executable)
    
    
    if __name__ == "__add_to_winpath_":
        e1 = Win32Environment(scope="system")
        print(e1.getenv('PATH'))
        name = "d:\workspace\ndk\android-ndk-r9d\"
        e1.setenv('PATH', e1.getenv('PATH') + ';' + name)
        print(e1.getenv('PATH'))
    Ответ написан
    Комментировать
  • Почему в элементе библиотеки tinyxml нет работает метод QueryStringAttribute?

    vbloodv
    @vbloodv Автор вопроса
    Программист С++
    В настройках компилятора добавил препроцесор TINYXML_USE_STL
    все заработало.
    Ответ написан
    Комментировать
  • Менеджер памяти для проекта C++?

    vbloodv
    @vbloodv
    Программист С++
    Посту смерть, сейчас используют в основном умные указатели std::shared_ptr
    Ответ написан
    Комментировать
  • Существует ли пример программы на С++ с полным набором особенностей этого языка?

    vbloodv
    @vbloodv
    Программист С++
    С++ в шутку называют(на лурке) языком на котором писал господь бог. Поэтому он всеобъемлющь ) До БД я сомневаюсь, т.к. общение с базами данных не входят в прямое предназначение языка. Тут лучше специфичиский T-SQL например.
    С++ это нативный код, скорость и сложность. Если надо именно С++ то, во всех компаниях советуют читать Бьерна Страустрапа и смотреть исходники Chromium, Clang. У меня область не совсем та что у clang'a и у chromium поэтому честно признаюсь разобраться не получилось. Мне же было проще разбираться по примитивным игрушкам, качая их исходный код на github'e и по учебнику Павловской. Её примеры с разными Zombie * Zombie; очень наглядные. Но в целом, вопрос твой такой-же как и язык "всеобъемлющий"
    Ответ написан
    Комментировать