我有一个配置文件config.py,并且我尝试不使用importlib.import_module()
(或imp.load_source()
)来读取属性的值。
所以,我这样做了:
# trying to just get the attribute 'comment' from the file
import ast
fd = open('config.py')
root = ast.parse(fd.read())
names = list(node for node in ast.walk(root) if isinstance(node, ast.Name) and node.id == 'comment')
print(names)
# [<_ast.Name object at 0x7fcb999048d0>]
print(names[0])
# <_ast.Name object at 0x7fcb999048d0>
print(names[0].id)
# 'comment'
print(names[0].ctx)
# <_ast.Store object at 0x7fcb9b9acbd0>
print(names[0].lineno)
# 12
print(names[0].ctx)
# <_ast.Store object at 0x7f19db3f1c10>
dir(names[0].ctx)
# ['__class__', '__delattr__', '__dict__', '__doc__', '__format__',
# '__getattribute__', '__hash__', '__init__', '__module__', '__new__',
# '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
# '__str__', '__subclasshook__', '__weakref__', '_attributes', '_fields']
文件(config.py)在第12行上具有以下内容:
comment = "qos sample run"
我正在尝试弄清楚如何在代码中获得此值("qos sample run"
)。我可以读取文件并获得第12行,但我猜测该值存储在ctx对象中的某个位置,但我无法弄清楚位置。
任何帮助表示赞赏。谢谢!