【发布时间】:2013-07-27 08:45:55
【问题描述】:
我正在做一个 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。
到目前为止,第二个想法对我来说似乎是最好的,但我想知道:是否有另一种更好的技术来代理现有模块,同时尽可能少地修改现有代码?
【问题讨论】:
-
是从
subprocess启动的运行系统shell 或非python 可执行文件的任何东西。如果是这样,尽管/dev/null可能是您的朋友,但您可能会遇到更大的问题。
标签: python python-2.7 module proxy