将命令行参数传递给runpy

时间:2019-04-19 03:28:13

标签: python python-3.x

我有两个文件,其中一个具有我关心的副作用,该副作用发生在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

1 个答案:

答案 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