在导入模块中模拟python的本机"开放"函数



我想覆盖python的原生open函数。 这是我尝试过的。我的目录中有以下文件:

main.py
mock.py
test.txt
test_main.py

main.py包含以下内容:

fs = open('test.txt', 'r')

mock.py包含以下内容:

def open():
print("hello")

test.txt包含以下内容:

abc

test_main.py包含以下内容:

import pathlib
import mock
if __name__=="__main__":
file_path = pathlib.Path('test.txt')  
open = mock.open
import main
file_path.unlink()

在第 6 行test_main.py中,我试图通过设置自己的来覆盖 函数mock.py关键字open.test_main.py之内 看起来Python将使用我的定义。但是,在 导入main.py看起来 Python 仍然诉诸本机定义,因此python test_main.py抛出以下错误:

权限错误: [WinError 32] 进程无法访问该文件,因为它正由另一个进程使用:"测试.txt">

我怎样才能重新定义open以便我的定义适用于所有 导入的命名空间?

多亏了这个问题,我才找到它。需要导入builtins

import pathlib
import mock
import builtins
if __name__=="__main__":
file_path = pathlib.Path('test.txt')  
builtins.open = mock.open
import main
file_path.unlink()

相关内容

  • 没有找到相关文章