gpt4 book ai didi

python - 将命令行参数传递给 runpy

转载 作者:行者123 更新时间:2023-12-04 11:41:43 30 4
gpt4 key购买 nike

我有两个文件,一个有我关心的副作用,它发生在 if __name__ == "__main__" 中。 guard :

# 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 ?

最佳答案

能这么直截了当吗?我几乎是偶然发现了这个解决方案。

$ python3 b.py foo
{'arg': 'foo'}

看来 sys.argv[1]传递给 a即使 b.py从命令行调用。

编辑

这是我的 shell 中的一个示例 session :

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'}

关于python - 将命令行参数传递给 runpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55756213/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com