2

我不知道是否有一种简单的方法可以做到这一点,它不依赖于手动写下脚本中保存的输出对任何建议如此开放。我想要一个在我的脚本末尾运行的函数,它会自动生成一个名称如下的文本文件:“IO_track_scriptname_date_time”,其中包含我加载的文件和保存的文件的列表(位置链接)。然后将此 txt 文件保存到所需的目的地。

谢谢您的帮助

编辑:或保留输入和输出日志的任何替代方式。

4

1 回答 1

1

这是一个围绕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")
于 2019-11-04T13:44:16.200 回答