我正在做一个 Python 2.7 项目,做大量的 I/O;通过subprocess
模块启动进程,通过创建目录,通过os.makedirs
复制文件shutil.copy2
等等。
现在我想要一个“试运行”模式,即程序实际上不执行任何 I/O。有没有一种简单的方法可以做到这一点,知道基本上我所有的 I/O 都是使用三个模块 os、shutil 和 subprocess 完成的?
到目前为止我考虑过的两种方法:
为我想要静音的所有内容编写包装函数,例如
mymakedirs
只转发到os.makedirs
. 所有包装函数都会检查一个全局标志,如果有请求则什么都不做。不幸的是,这意味着不仅要编写大量的包装函数,还要触及大量现有的代码。编写类似
myshutil
考虑全局标志的代理模块,并根据from shutil import *
它提供或提供存根。我能看到的唯一缺点 - 我怎样才能轻松地知道要编写哪些存根(我可以看到模块中调用了哪些函数吗?),并且我需要对所有客户端代码进行轻微修改,以便import shutil
例如更改为import myshutil
.
到目前为止,第二个想法对我来说似乎是最好的,但我想知道:是否有另一种更好的技术来代理现有模块,尽可能少地修改现有代码?