我有两个文件,其中一个具有我关心的副作用,该副作用发生在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
。
如何在调用sys.argv
之前模拟runpy
,或者以其他方式将该值提供给a.py
?
答案 0 :(得分:0)
可以这么简单吗?我几乎是偶然发现这种解决方案的。
def get_score(self):
score = 0
aces = 0
for c in cards:
score += c.get_score() # aces should return a value of 11
if c.getrank() == "Ace": # count aces
aces += 1
while aces > 0 and score > 21: # try to avoid a bust by changing ace values from 11 to 1
score -= 10 # until the bust has ben avoided, or you're out of aces
aces -= 1
return score
即使从命令行调用$ python3 b.py foo
{'arg': 'foo'}
,似乎sys.argv[1]
也传递给a
。
这是我的shell中的一个示例会话:
b.py