読者です 読者をやめる 読者になる 読者になる

astモジュールを使ってあるモジュールの変数名を抜き出す。

python

NodeTransformerというvisitorが用意されているのでこれを使うのが一番楽

import ast
import inspect


class CollectVarname(ast.NodeTransformer):
    def __init__(self):
        self.r = set()

    def visit_Name(self, node):
        self.r.add(node.id)


def collect_varname(node):
    visitor = CollectVarname()
    visitor.visit(node)
    return list(visitor.r)


def collect_varname_from_module(m):
    with open(inspect.getsourcefile(m)) as rf:
        m = ast.parse(rf.read())
        return (collect_varname(m))

if __name__ == "__main__":
    import sys
    print(collect_varname_from_module(sys.modules[__name__]))
# ['node', 'set', 'collect_varname_from_module', 'ast', 'collect_varname', 'visitor', 'self', 'inspect', 'list', 'm', 'sys', 'rf', '__name__', 'open', 'CollectVarname']