python - Hvordan gemmer miljøvariabler

Indlæg af Hanne Mølgaard Plasc

Problem



Sådan indstilles en miljøvariabel ved hjælp af Windows Command Processor (cmd):


SET MY\_VARIABLE=c:path	ofilename.txt


MY\_VARIABLE kan nu åbnes af Python ansøgning startet af samme cmd vindue:


import os
variable = os.getenv('MY\_VARIABLE') 


Jeg spekulerer på, om der er en måde at indstille en miljøvariabel på fra Python, så den bliver tilgængelig for andre processer, der kører på samme maskine?
Sådan indstilles en ny miljøvariabel:


os.environ['NEW\_VARIABLE'] = 'NEW VALUE'


Men denne NEW\_VARIABLE går tabt, så snart Python behandler og forlader.

Bedste reference


Du kan gemme miljøvariabler vedvarende i Windows-registreringsdatabasen. Variabler kan gemmes til den aktuelle bruger eller til systemet:


Kode til vedvarende at indstille en miljøvariabel på Windows:


import win32con
import win32gui
try:
    import \_winreg as winreg
except ImportError:
    # this has been renamed in python 3
    import winreg

def set\_environment\_variable(variable, value, user\_env=True):
    if user\_env:
        # This is for the user's environment variables
        reg\_key = winreg.OpenKey(
            winreg.HKEY\_CURRENT\_USER,
            'Environment', 0, winreg.KEY\_SET\_VALUE)
    else:
        # This is for the system environment variables
        reg\_key = winreg.OpenKey(
            winreg.HKEY\_LOCAL\_MACHINE,
            r'SYSTEMCurrentControlSetControlSession ManagerEnvironment',
            0, winreg.KEY\_SET\_VALUE)

    if '\%' in value:
        var\_type = winreg.REG\_EXPAND\_SZ
    else:
        var\_type = winreg.REG\_SZ
    with reg\_key:
        winreg.SetValueEx(reg\_key, variable, 0, var\_type, value)

    # notify about environment change    
    win32gui.SendMessageTimeout(
        win32con.HWND\_BROADCAST, win32con.WM\_SETTINGCHANGE, 0, 
        'Environment', win32con.SMTO\_ABORTIFHUNG, 1000)


Testkode for at påberåbe sig ovenstående:


set\_environment\_variable('NEW\_VARIABLE', 'NEW VALUE')

Andre referencer 1


Ville en simpel, hvis ikke måske lidt rå måde at gøre dette være, blot at bruge os.system og sende kommandoen gennem det, som om du kørte det i CMD?


Et eksempel er os.system("SET MY\_VARIABLE=c:path ofilename.txt")


Håber det hjælper. «