我有两个文件,其中一个在if __name__ == "__main__"
保护内发生了我关心的副作用:
# a.py
d = {}
if __name__ == "__main__":
d['arg'] = 'hello'
第二个文件使用
runpy
导入第一个文件,并输出字典:# b.py
import runpy
m = runpy.run_module('a', run_name='__main__')
print(m['d']) # {'arg': 'hello'}
到目前为止,这样做是可行的。但现在我想更改第一个文件以接受命令行参数:
import sys
d = {}
if __name__ == "__main__":
d['arg'] = process(sys.argv[1])
问题在于
process()
是由他人编写的且超出我的控制范围,但我仍希望在它“处理”后得到更新的字典d
。在调用
runpy
之前如何模拟sys.argv
,或以其他方式将该值提供给a.py
?
process
是由a.py
的作者编写的任意代码,超出了我的控制范围。它可能不是一个函数,而是一堆语句。重点是在更新字典之前,sys.argv[1]
被用作进一步处理的输入。 - Alex Shroyerrunpy.run_module
不会返回一个包含arg
的字典。你确定代码是正常工作的吗?还是它只是偶然模拟了参数? - asn-0184runpy.run_module
返回一个键为d
的模块,所以上面应该是m['d']
。 - Alex Shroyer