我有一个函数,它从 .sh 文件中获取以下形式的输入
my_fun.py --arg1 $arg1 --arg2 $arg2 --arg3 $arg3
这里的问题是,根据arg1的值,输入的数量是不同的。我如何使用
argparse
来实现它?
这里我想用
parser = argparse.ArgumentParser()
,但是不知道要读多少行。
谢谢。
我没有太多想法。
这里有一个建议:分两遍解析你的论点。在第一遍中,您解析
--arg1
。然后根据你得到的值,构建一个解析器来解析其余的。
#!/usr/bin/env python3
import argparse
# First pass: parse only --arg1
parser = argparse.ArgumentParser()
parser.add_argument("--arg1")
options, remainder = parser.parse_known_args()
# Second pass: parse the rest.
# Say if --arg1 is foo, we got 2 additional flags,
# if --arg1 is bar, we got 1 more
parser = argparse.ArgumentParser()
if options.arg1 == "foo":
parser.add_argument("--arg2")
parser.add_argument("--arg3")
elif options.arg1 == "bar":
parser.add_argument("--arg4")
parser.parse_args(remainder, options)
print(options)
以下是一些互动:
$ python3 main.py --arg1 foo --arg2 cow --arg3 dog
Namespace(arg1='foo', arg2='cow', arg3='dog')
$ python3 main.py --arg1 bar --arg4 cat
Namespace(arg1='bar', arg4='cat')
parse_known_arg
仅解析 --arg1
并忽略其余部分。结果存储在命名空间对象中,options
。命令行的其余部分存储在 remainder
中。--arg1
的值添加不同的参数。parse_args
时,我们传入上一次调用 options
中的命名空间。这样,我们将所有命令行标志合并到一个命名空间对象中。