gpt4 book ai didi

python - 如何从 python 脚本设置 argparse 参数

转载 作者:行者123 更新时间:2023-11-28 21:45:08 25 4
gpt4 key购买 nike

我在包的 setup.py 中指定了一个 main 函数作为入口点,它使用 argparse 包来传递命令行参数(参见 discussion here ):

# file with main routine specified as entry point in setup.py
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('a', type=str, help='mandatory argument a')
args = parser.parse_args()

理想情况下,我想按照建议在包的测试中使用相同的 main 函数 here .在后一种情况下,我想从测试类中调用 main 函数并在函数调用之前设置(某些)命令行参数(否则会失败,因为缺少参数).

# file in the tests folder calling the above main function
class TestConsole(TestCase):
def test_basic(self):
set_value_of_a()
main()

这可能吗?

最佳答案

argparse模块实际上是从特殊变量中读取输入变量,这个变量叫做ARGV(ARGument V 矢量)。通常通过从 sys 模块读取 sys.argv 来访问此变量。

这个变量是一个普通列表,因此您可以像这样将命令行参数附加到它:

import sys
sys.argv.extend(['-a', SOME_VALUE])
main()

但是,在运行时乱用 sys.argv 并不是一个好的测试方法。在某些有限范围内替换 sys.argv 的更简洁的方法是使用 unittest.mock.patch 上下文管理器,如下所示:

with unittest.mock.patch('sys.argv'. ['-a', SOME_VALUE]):
main()

Read more about unittest.mock.patch in documentation

此外,检查这个 SO 问题:

How do I set sys.argv so I can unit test it?

关于python - 如何从 python 脚本设置 argparse 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39853278/

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