2017-01-31 86 views
1

要使用Windows命令處理器(cmd)設置環境變量:如何存儲環境變量

SET MY_VARIABLE=c:\path\to\filename.txt 

MY_VARIABLE現在可以通過同一個cmd窗口中啓動Python應用程序可以訪問:

import os 
variable = os.getenv('MY_VARIABLE') 

我想知道是否有一種方法可以在Python中設置一個環境變量,以便它可以在同一臺機器上運行的其他進程使用? 要設置一個新的環境變量:

os.environ['NEW_VARIABLE'] = 'NEW VALUE' 

但這NEW_VARIABLE作爲很快就失去了Python進程和退出。

+0

如果你的Python腳本*啓動*這些其他進程,平凡和便攜。如果沒有父/子關係......嗯,你可以將它們堅持到Windows註冊表,以讓他們在啓動時其他進程設置,如果這是你想要的,但你應該標記爲Windows專用的,你的問題案件。 –

+2

當一個進程更新存儲在註冊表中的環境變量,應該播放一個'WM_SETTINGCHANGE'「環境」消息,告訴瀏覽器重新加載其環境變量。任何其他具有頂級窗口的關心監聽的進程在看到此消息時都可以做到這一點。控制檯進程(如cmd.exe)通常不擁有一個窗口(控制檯窗口由conhost.exe擁有),所以它們通常不會收到此消息。 – eryksun

回答

2

您可以在Windows註冊表中永久地存儲環境變量。變量可以保存當前用戶或系統:

代碼以持久設置環境變量在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'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 
      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) 

測試代碼來調用上面:

set_environment_variable('NEW_VARIABLE', 'NEW VALUE') 
-3

請問這樣做是簡單地使用使用os.system並通過傳遞命令,如果你是在CMD運行它的簡單,如果不稍微也許粗暴的方式?

一個例子是os.system("SET MY_VARIABLE=c:\path\to\filename.txt")

。希望helps.`

+1

這絕對不會浪費時間。 'SET'命令隻影響立即退出的子進程。 –

+0

好的,好的。正如我在回答提示我不能完全肯定,是不是在一個位置,以檢查的時間,但認爲它可能在正確的方向可能至少點OP。 – BoshJailey