如何使用os.environ作为字典值

时间:2015-10-20 14:31:01

标签: python dictionary

创建一个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'],
}

2 个答案:

答案 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.environdict()包裹

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'