我有两个文件,其中一个有一个我关心的副作用,该副作用发生在if __name__ == "__main__"守卫中:
# a.py
d = {}
if __name__ == "__main__":
d['arg'] = 'hello'
Run Code Online (Sandbox Code Playgroud)
第二个文件导入第一个文件(使用runpy)并打印字典:
# b.py
import runpy
m = runpy.run_module('a', run_name='__main__')
print(m['d']) # {'arg': 'hello'}
Run Code Online (Sandbox Code Playgroud)
到目前为止这有效。但现在我想更改第一个文件以接受命令行参数:
import sys
d = {}
if __name__ == "__main__":
d['arg'] = process(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)
问题是它process()是由其他人编写的,超出了我的控制范围,但我仍然想d在“处理”后获取更新的字典。
我如何sys.argv在调用之前进行模拟runpy,或者以其他方式提供该值a.py?
事情能这么简单吗?我几乎是偶然发现了这个解决方案。
$ python3 b.py foo
{'arg': 'foo'}
Run Code Online (Sandbox Code Playgroud)
似乎即使从命令行调用时sys.argv[1]也会传入。ab.py
这是我的 shell 中的一个示例会话:
me@desktop$ cat a.py b.py
import sys
d = {}
filename = sys.argv[1]
if __name__ == "__main__":
d['result'] = filename + ' world'
# usage:
# python3 b.py filename
# 'filename' is passed in to the a module
import runpy
aa = runpy.run_module('a', run_name='__main__')
print(aa['d']) # {}
me@desktop$ python3 b.py hello
{'result': 'hello world'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6892 次 |
| 最近记录: |