我不知道是否有一种简单的方法可以做到这一点,它不依赖于手动写下脚本中保存的输出对任何建议如此开放。我想要一个在我的脚本末尾运行的函数,它会自动生成一个名称如下的文本文件:“IO_track_scriptname_date_time”,其中包含我加载的文件和保存的文件的列表(位置链接)。然后将此 txt 文件保存到所需的目的地。
谢谢您的帮助
编辑:或保留输入和输出日志的任何替代方式。
我不知道是否有一种简单的方法可以做到这一点,它不依赖于手动写下脚本中保存的输出对任何建议如此开放。我想要一个在我的脚本末尾运行的函数,它会自动生成一个名称如下的文本文件:“IO_track_scriptname_date_time”,其中包含我加载的文件和保存的文件的列表(位置链接)。然后将此 txt 文件保存到所需的目的地。
谢谢您的帮助
编辑:或保留输入和输出日志的任何替代方式。
这是一个围绕open
函数的瘦对象包装器,用于跟踪所有打开的文件。
class Open:
_open = open
def __init__(self):
self.opened_files = []
self.fp = None
def __call__(self,
file,
mode='r',
buffering=-1,
encoding=None,
errors=None,
newline=None,
closefd=True,
opener=None):
self.fp = self._open(file, mode, buffering, encoding, errors,
newline, closefd, opener)
self.opened_files.append((mode, file))
return self.fp
def __enter__(self, *args, **kwargs):
return self.__call__(*args, **kwargs)
def __exit__(self, *exc_details):
return self.fp.close()
def __getattr__(self, attr):
return getattr(self.fp, attr)
def export(self, filename):
with open(filename, 'w') as fp:
for m, fn in self.opened_files:
fp.write(f'({m}): {fn}\n')
open
要实际使用它,您需要使用此类的实例化覆盖内置函数。如果您有一个正在调用的文件,您可以将其弹出到__main__
块中。IE
...
if __name__=='__main__':
# code defining Open class here
...
open = Open()
# other code in __main__ here
open.export("IO_track_scriptname_date_time.txt")