我正在尝试使用系统日志进行日志记录。我有一个在其中的设施的字符串。在这种情况下,。我想使用这个字符串来访问syslog.LOG_LOCAL0
,这是一个值为128的int。如果这是一个函数,我会使用getattr()
,但我不知道如何做这样的事情是不可调用的像一个int,我怎么样?从字符串获取函数属性的值
基本上我想打电话给syslog.LOG_LOCAL0
,但把作为一个字符串,所以我不能。
我正在尝试使用系统日志进行日志记录。我有一个在其中的设施的字符串。在这种情况下,。我想使用这个字符串来访问syslog.LOG_LOCAL0
,这是一个值为128的int。如果这是一个函数,我会使用getattr()
,但我不知道如何做这样的事情是不可调用的像一个int,我怎么样?从字符串获取函数属性的值
基本上我想打电话给syslog.LOG_LOCAL0
,但把作为一个字符串,所以我不能。
如果你想设置一个你想要的值setattr(object, name, value)
(注意没有下划线btw)。所以,你可以这样做:
setattr(syslog, "LOG_LOCAL0", "The log value")
如果你要使用的值,则getattr
仍然是适当
getattr(syslog, "LOG_LOCAL0") # syslog.LOG_LOCAL0 for all intents and purposes
您可以使用__dict__
返回在类的所有functions
和variables
一本字典,然后使用你想获得的变量作为关键,来获得它的价值。
示例 -
>>> class CA:
... i = 15
... def hello(self):
... print("Hello")
...
>>> CA.__dict__
mappingproxy({'__dict__': <attribute '__dict__' of 'CA' objects>, '
>>> CA.__dict__['i']
15
在你的情况可能 -
syslog.__dict__['LOG_LOCAL0']
虽然脚注从here -
除了一两件事。模块对象有一个叫做dict的秘密只读属性,它返回用于实现模块名称空间的字典;名称字典是一个属性,但不是全局名称。很明显,使用这种方法违反了命名空间实现的抽象,应该仅限于事后调试器之类的事情。
感谢你,我没有想到这一点,幸运的是,我只是在我的一个小错误正在做 – Paul
对不起,我可能不清楚。我不想设定一个价值。我想使用已经存在的值“syslog.LOG_LOCAL0”,这可能是'syslog.LOG_LOCAL1'等等,这取决于输入,但是我只有一个名称为string的字符串,并调用了'syslog。“LOG_LOCAL0”'不会是一个有效的命令,我想知道如何使用字符串进行调用。 – Paul
谢谢你,一直都是getattr。我正在写'getattr(syslog,'LOG_LOCAL0')()'而不是'getattr(syslog,'LOG_LOCAL0')' – Paul