我正在尝试收集有关正在打开和关闭的文件的信息,以便我可以跟踪哪些进程正在执行哪些操作。我与不会系统地使用自定义I / O函数和方法的用户一起工作,所以我想改变内置函数的行为。
我想出了一种改变开放功能的方法。它可能不是最佳的,但它确实有效。
import logging
import os
import sys
import io
import logging
import __builtin__
def custom_open(file_name, access_mode, buffering = 0):
logging.debug('Opening file ' + file_name)
return __builtin__.open(file_name, access_mode, buffering)
logging.getLogger('').setLevel(logging.DEBUG)
open = custom_open
f = open('workfile', 'w')
f.write('This is a test\n')
f.close()
我现在要做的是更改文件关闭方法的行为。我尝试了一些但没有任何作用。
答案 0 :(得分:0)
详细说明我的评论,因为似乎没有其他人提交答案:
# Create a custom file class
class custom_file(file):
def close(self):
# do logging
super(file, self).close()
# create a custom file opener
def custom_open(*args, **kwargs):
# do logging
return custom_file(*args, **kwargs)
# Set local `open` to point to your custom_open fn
open = custom_open
隐含在这里(我没有做研究,所以它可能是错的)是open('bla')
只是呼唤file.__init__('bla')
,所以要小心。
编辑:您可能还需要确保覆盖file
上的其他方法,例如flush
或其他任何会导致Python触及磁盘的方法。