我正在编写一个 Python 装饰器,我想知道在运行时包含该装饰器的所有文件的名称。装饰器可能与使用它的文件不在同一个模块中。
更具体地说,我实际上想要这些文件的路径,因为我想确定git这些文件是否有未提交的更改(假设它们正在使用git)。然后我可以使用
git -C <path> status或GitPythonvel sim。
我知道os.path.abspath但使用它需要以某种方式传递文件名,这通过装饰器似乎不可行。
我正在编写一个 Python 装饰器,我想知道在运行时包含该装饰器的所有文件的名称。装饰器可能与使用它的文件不在同一个模块中。
更具体地说,我实际上想要这些文件的路径,因为我想确定git这些文件是否有未提交的更改(假设它们正在使用git)。然后我可以使用
git -C <path> status或GitPythonvel sim。
我知道os.path.abspath但使用它需要以某种方式传递文件名,这通过装饰器似乎不可行。
您可以为此使用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列表,您可以将其用作类似路径的对象。
pip install pycollect
披露:我在github.com/allrod5/pycollect积极维护这个库。