我想写一些测试python模块的包装。 这个包装模拟一个环境,然后通过execfile启动其他python模块。 有很多python模块需要测试(> 200)。防止调用子模块的全局变量在不更改submodul本身的情况下进行更改?
这些模块内部有一些硬编码的变量,它们包含一些绝对文件路径,这些文件路径在我的模拟环境中不存在(我也无法创建它们)。这些文件路径是选项文件的路径,该脚本将读入。每个模块总是只有一个选项 - 文件,并且该选项文件的文件路径始终保存在同一个全局变量中(我的意思是:变量名称在每个模块中都是相同的:optionFile)。
optionFile = "Path to Option file"
我的想法是,我也许可以在我执行的测试模块预先设置这个全局变量“optionFile”与现有的路径。但是,这当然不会有帮助,因为执行模块在执行时会用硬编码值覆盖“optionFile”。
我想知道是否有一种方法可以覆盖globals对象的__setattr__
函数,所以它对某些变量名不会做任何事情,但是我没有对我的尝试做出成功。你认为这可以工作,并有任何建议吗?
模块中代码的性质是什么?如果它全部位于模块的顶层,那么你可能不太好运。也就是说,如果一个文件具有'optionFile =“/ some/path”',然后在下一行执行了'open(optionFile)',那么你就不能在'optionFile'中修改值之间。你可能会更好地运用“open”函数(或者模块用来与'optionFile'交互的任何其他函数)。 – BrenBarn
好的解释:你所描述的正是python模块的性质:(。 我怎么能用open-function? ...来实现它,因为这实际上可以工作,因为这些选项文件的所有扩展名都是相同(.opt)。如果我打开函数“重新路由”所有以'.opt'结尾的文件到硬编码版本(我的替换选项文件),这可能会起作用吗? – and0r
问题似乎不清楚对我而言,标题要求采取各种方法来防止变量被改变,但是主体要求改变变量的方法? – Goyo