2017-02-15 59 views
0

(> = 3.4的Python)的Python os.getenv返回無,在Windows 10

失蹤變種隨着os.getenv(),我不能夠找回一些ENV瓦爾,像%DATE%%TIME%

例如:

print(os.getenv('computername')) # works 
print(os.getenv('date')) # not working, returning None 
print(os.getenv('time')) # not working, returning None 

所以我檢查VAR ENV蟒蛇的列表可以通過此檢測: [print(var) for var in os.environ] 這導致很多ENV的列表,但缺少date,和0123至少是。 奇怪的是,列表中的最後一項是None對象的列表,可能是缺少的var env,但僅在使用交互式控制檯時出現,因此不在列表中,或者可能是某些印刷品的工件交互式控制檯中使用的函數?

嘗試

import os 
varenv = [var for var in os.environ] 
[print(var) for var in varenv]` 

與命令行

最後的交互式控制檯,當你是在cmd中的窗戶,echo %date% %computername%的偉大工程,這些變種之間沒有不同的處理。

我推測它可能與unicode有關,但在我的研究中還沒有找到任何答案:爲什麼%DATE%%TIME%不能正常工作,而%computername%就好了?

回答

1

實際上,%DATE%%TIME%不是環境變量。

請參閱此Microsoft文檔User Environment Variables以查看系統的環境變量列表。

+0

'DATE'和'TIME'是cmd.exe shell中可用的假環境變量,以及'CD','RANDOM'和'ERRORLEVEL'。 Windows API還爲當前目錄('__CD__')和應用程序目錄('__APPDIR__')以及以'='開頭的'hidden'環境變量(如用於工作目錄的環境變量)在每個驅動器上,例如D =驅動器的'= D:'。這些只能通過直接調用'GetEnvironmentVariable'來訪問。 – eryksun

+0

看來%DATE%和%TIME%是[動態環境變量](https://en.wikipedia.org/wiki/Environment_variable#Windows)。但我找不到一個很好的方式來檢索python中的這些var。 –

+0

@GuillaumeLebreton,它們只是cmd.exe中的假變量。如果您因爲某種原因需要它們,請使用'subprocess.check_output('cmd/u/c「echo%{}%''.format(name))。decode('utf-16le')。rstrip()',for一個給定的'名稱'如''DATE「'。我們需要使用UTF-16來確保沒有Mojibake或最適合的編碼。 – eryksun