2

我正在编写一个 Python 装饰器,我想知道在运行时包含该装饰器的所有文件的名称。装饰器可能与使用它的文件不在同一个模块中。

更具体地说,我实际上想要这些文件的路径,因为我想确定git这些文件是否有未提交的更改(假设它们正在使用git)。然后我可以使用

git -C <path> statusGitPythonvel sim。

我知道os.path.abspath但使用它需要以某种方式传递文件名,这通过装饰器似乎不可行。

4

1 回答 1

1

您可以为此使用pycollect

from pycollect import PythonFileCollector

collector = PythonFileCollector()
files = []
for entry in collector.collect("../some/base/search/path"):
    with open(entry) as file:
        if "@my_decorator" in file.read():
            files.append(entry)
do_stuff(files)

它独立于操作系统,并PythonFileCollector::collect返回一个os.DirEntry列表,您可以将其用作类似路径的对象。

pycollect 可在 PyPI 获得

pip install pycollect

披露:我在github.com/allrod5/pycollect积极维护这个库。

于 2020-04-09T01:35:02.897 回答