我正在寻找一种在替换导入时运行模块的方法。这将是在下面的伪代码中实现run_patched
所缺少的魔力。在
from argparse import ArgumentParser
class ArgumentCounter(ArgumentParser):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
arg_counter = 0
def add_argument(self, *args, **kwargs):
super().add_argument(*args, **kwargs)
arg_counter += 1
def parse_args(self, *args, **kwargs):
super().parse_args(*args, **kwargs)
print(arg_counter)
run_patched('test.test_argparse', ArgumentParser = ArgumentCounter)
我知道单个方法可以被赋值代替,例如声明ArgumentParser.parse_args = print
,所以我很想搞乱像sys.modules
这样的全局变量,然后用runpy.run_module
来执行模块。在
不幸的是,整个策略应该能够在多线程场景中工作。因此,更改应该只影响执行的模块,而程序的其他部分可以继续使用未修补的模块,就像从未接触过它们一样。在
目前没有回答
相关问题 更多 >
编程相关推荐