我有一个模块需要导入并且更改导入实例中的特定变量值,然后执行它。
请注意:由于遗留原因,我无法对被导入的模块进行任何修改。
这是我想做的事情:
假设我想要导入的模块名为a.py,它看起来像这样:
var1 = 1
var2 = 2
if __name__ == '__main__':
print var1+var2
现在我正在b.py中导入它,作为调用者脚本。 我尝试导入它,更改变量var1的值,并使用以下方式通过runpy运行它作为主程序。
import runpy
import a
a.var1 = 2
result = runpy._run_module_as_main(a.__name__)
但是这个程序只会打印结果
3
,而不是期望的 4
。有没有其他方法可以实现这个目标(除了使用 runpy)而不需要更改 a.py 中的任何内容?可以使用第三方模块,只要我不必修改导入的模块即可。我正在使用 Python 2.6 版本。
ast
模块。 - Wayne Wernerif __name__ == "__main__":
块内部的任何内容,并像你已经在做的那样简单地改变值。除非它被糟糕地编写,否则这个块中不应该有太多的代码。 - Wayne Wernerrunpy
模块可以归结为exec .. in ..
。尝试复制该功能,并传入一个对“var1”值更改免疫的字典。 - UltraInstinct