python通过脚本路径获取对应脚本里的内容

test.py

class A:
    def a(self):
        pass

    @staticmethod
    def b():
        pass

    @classmethod
    def c(cls):
        pass

    @property
    def d(self):
        return 1


e = 1


def f():
    pass

test2.py

import inspect
import os
from importlib.util import spec_from_file_location, module_from_spec

script_path = "test.py"


def get_members_from_file(file_path: str, name="module"):
    if os.path.exists(file_path):
        spec = spec_from_file_location(name, file_path)
        module = module_from_spec(spec)
        spec.loader.exec_module(module)
        members = inspect.getmembers(module, lambda member: not inspect.ismodule(member))
        members_list = []
        for name, value in members:
            if not name.startswith('_'):
                info = {"name": name, "value": value}
                if inspect.isclass(value):
                    info["type"] = "class"
                    class_members = []
                    for k, v in vars(value).items():
                        if not k.startswith("_"):
                            class_member_info = {"name": k, "value": v, "type": v.__class__.__name__}
                            class_members.append(class_member_info)
                    info["class_members"] = class_members
                else:
                    info["type"] = value.__class__.__name__
                members_list.append(info)
        return members_list
    else:
        raise Exception(f"file_path={file_path} not exist")


print(get_members_from_file(script_path))

 

posted @ 2023-10-23 14:42  NAVYSUMMER  阅读(10)  评论(0编辑  收藏  举报
交流群 编程书籍