创建一个dictionzry的问题应该包含一个env变量作为每个键的值。 它是导致我猜的问题的单引号。有人能指出我这样做的pythonic方法吗? :)
macros = {
'date': os.environ['NOTIFY_SHORTDATETIME'],
'hostname': os.environ['NOTIFY_HOSTNAME'],
'ip': os.environ['NOTIFY_HOSTADDRESS'],
'alias': os.environ['NOTIFY_HOSTALIAS'],
'hostcmd': os.environ['NOTIFY_HOSTCHECKCOMMAND'],
'servicecmd': os.environ['NOTIFY_SERVICECHECKCOMMAND'],
'servicenotifnum': os.environ['NOTIFY_SERVICENOTIFICATIONNUMBER'],
'servicedesc': os.environ['NOTIFY_SERVICEDESC'],
'hostoutput': os.environ['NOTIFY_HOSTOUTPUT'],
'serviceoutput': os.environ['NOTIFY_SERVICEOUTPUT'],
'hoststate': os.environ['NOTIFY_HOSTSTATE'],
'svcstate': os.environ['NOTIFY_SERVICESTATE'],
'lasthoststate': os.environ['NOTIFY_LASTHOSTSTATE'],
'laststatesvc': os.environ['NOTIFY_LASTSTATESERVICE'],
'notiftype': os.environ['NOTIFY_NOTIFICATIONTYPE'],
}
答案 0 :(得分:1)
键错误表示os.environ
中的命名项不存在。如果您试图找出计算机上存在 的内容,您可以调试并打印出如下列表:
import os
for k in os.environ:
print k
在我的Windows XP框中,我得到了这些输出:
TMP
COMPUTERNAME
USERDOMAIN
PSMODULEPATH
COMMONPROGRAMFILES
PROCESSOR_IDENTIFIER
PROGRAMFILES
PROCESSOR_REVISION
SYSTEMROOT
PATH
PROGRAMFILES(X86)
COMSPEC
TEMP
COMMONPROGRAMFILES(X86
PROCESSOR_ARCHITECTURE
ALLUSERSPROFILE
LOCALAPPDATA
HOMEPATH
UATDATA
VS120COMNTOOLS
PROGRAMW6432
USERNAME
LOGONSERVER
PROMPT
SESSIONNAME
PROGRAMDATA
USERDNSDOMAIN
PATHEXT
FP_NO_HOST_CHECK
WINDIR
APPDATA
HOMEDRIVE
SYSTEMDRIVE
NUMBER_OF_PROCESSORS
VBOX_INSTALL_PATH
PROCESSOR_LEVEL
PROCESSOR_ARCHITEW6432
COMMONPROGRAMW6432
OS
PUBLIC
USERPROFILE
根据您所获得的错误,您似乎尝试将环境变量用于不同于实际使用的操作系统。您应该通过参考计算机的正确OS环境变量来解决此问题。
答案 1 :(得分:0)
您可以将os.environ
与dict()
包裹
Python3示例:
In [1]: import os
In [2]: os.environ.clear()
In [3]: os.environ
Out[3]: environ{}
In [4]: os.environ['FOO']='bar'
In [5]: os.environ
Out[5]: environ{'FOO': 'bar'}
In [6]: type(os.environ)
Out[6]: os._Environ
In [7]: type(dict(os.environ))
Out[7]: dict
In [8]: foo = dict(os.environ)
In [9]: foo['FOO']
Out[9]: 'bar'