我正在修改 Python 的ast(抽象语法树)模块。
使用ast.NodeVisitor,可以遍历源树并显示信息,例如每个节点的名称,如下所示:
class MyAST(ast.NodeVisitor):
def visit_ClassDef(self, node):
print(node.col_offset * " " +node.name)
self.generic_visit(node)
def visit_FunctionDef(self, node):
print(node.col_offset * " " + node.name)
self.generic_visit(node)
Run Code Online (Sandbox Code Playgroud)
然后它可以用于任何代码,如下所示:
tree = ast.parse(open("/path/to/file.py").read())
MyAST().visit(tree)
Run Code Online (Sandbox Code Playgroud)
这将输出类似的内容(例如在requests包中的models.py上使用):
RequestEncodingMixin
path_url
_encode_params
_encode_files
RequestHooksMixin
register_hook
deregister_hook
Request
__init__
__repr__
prepare
(...)
Run Code Online (Sandbox Code Playgroud)
我想知道对于给定节点,它的完整“路径”。在上面的输出示例中,当我在FunctionDef节点 中时deregister_hook,我想知道它的父节点,ClassDef RequestHooksMixin以便我可以输出类似 的内容RequestHooksMixin.deregister_hook。
我开发了一个Python脚本,可以连续执行多个任务(主要是连接服务器和检索信息).
有很多步骤,对于每个步骤,我想显示一个点,以便用户知道有什么事情发生.
在每一步结束时,我做:
print('.', end='')
Run Code Online (Sandbox Code Playgroud)
在最后一步,我写道:
print('Done!')
Run Code Online (Sandbox Code Playgroud)
它的工作原理,除了在执行最终打印之前没有显示任何内容,所以它有点失败了它的原始目的:)
基本上,屏幕上没有显示任何内容,并且在最后一刻,会弹出:
.......Done!
Run Code Online (Sandbox Code Playgroud)
如何强制Python逐步在同一行上打印?