我正在尝试配置argparse以允许我指定将在未来传递到另一个模块的参数。我想要的功能允许我插入诸如-A "-f filepath" -A "-t"
之类的参数并生成['-f filepath', '-t']
之类的列表。
在文档中,添加action='append'
似乎应该这样做 - 但是在尝试多次指定-A
参数时出现错误。
这是我的参数条目:
parser.add_argument('-A', '--module-args',
help="Arg to be passed through to the specified module",
action='append')
运行python my_program.py -A "-k filepath" -A "-t"
会从argparse:
my_program.py: error: argument -A/--module-args: expected one argument
最小例子:
from mdconf import ArgumentParser
import sys
def parse_args():
parser = ArgumentParser()
parser.add_argument('-A', '--module-args',
help="Arg to be passed through to the module",
action='append')
return parser.parse_args()
def main(args=None):
try:
args = parse_args()
except Exception as ex:
print("Exception: {}".format(ex))
return 1
print(args)
return 0
if __name__ == "__main__":
sys.exit(main())
有什么想法吗?我觉得奇怪的是,当append
将这些东西放入列表时,它告诉我它需要一个参数。
答案 0 :(得分:0)
问题不在于-A
不允许多次调用。这是-t
被视为一个单独的选项,而不是-A
选项的参数。
作为粗略的解决方法,您可以为空格添加前缀:
python my_program.py \
-A " -k filepath" \
-A " -t"
鉴于以下Minimal, Complete and Verifiable Example:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-A', '--module-args',
help="Arg to be passed through to the specified module",
action='append')
args = parser.parse_args()
print repr(args.module_args)
......该用法返回:
[' -k filepath', ' -t']
而忽略前导空格会重现您的错误。