2015-07-03 92 views
-1

我正在尝试使用系统日志进行日志记录。我有一个在其中的设施的字符串。在这种情况下,​​。我想使用这个字符串来访问syslog.LOG_LOCAL0,这是一个值为128的int。如果这是一个函数,我会使用getattr(),但我不知道如何做这样的事情是不可调用的像一个int,我怎么样?从字符串获取函数属性的值

基本上我想打电话给syslog.LOG_LOCAL0,但把​​作为一个字符串,所以我不能。

回答

1

如果你想设置一个你想要的值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 
+0

对不起,我可能不清楚。我不想设定一个价值。我想使用已经存在的值“syslog.LOG_LOCAL0”,这可能是'syslog.LOG_LOCAL1'等等,这取决于输入,但是我只有一个名称为string的字符串,并调用了'syslog。“LOG_LOCAL0”'不会是一个有效的命令,我想知道如何使用字符串进行调用。 – Paul

+0

谢谢你,一直都是getattr。我正在写'getattr(syslog,'LOG_LOCAL0')()'而不是'getattr(syslog,'LOG_LOCAL0')' – Paul

1

您可以使用__dict__返回在类的所有functionsvariables一本字典,然后使用你想获得的变量作为关键,来获得它的价值。

示例 -

>>> 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的秘密只读属性,它返回用于实现模块名称空间的字典;名称字典是一个属性,但不是全局名称。很明显,使用这种方法违反了命名空间实现的抽象,应该仅限于事后调试器之类的事情。

+0

感谢你,我没有想到这一点,幸运的是,我只是在我的一个小错误正在做 – Paul