我正在尝试使用 argparse 来解析我正在处理的程序的命令行参数。本质上,我需要支持在可选参数中传播的多个位置参数,但不能让 argparse 在这种情况下工作。在实际程序中,我使用的是自定义操作(每次找到位置参数时,我都需要存储命名空间的快照),但我遇到的问题可以通过 append
复制> 行动:
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-a', action='store_true')
>>> parser.add_argument('-b', action='store_true')
>>> parser.add_argument('input', action='append')
>>> parser.parse_args(['fileone', '-a', 'filetwo', '-b', 'filethree'])
usage: ipython [-h] [-a] [-b] input
ipython: error: unrecognized arguments: filetwo filethree
我希望这会导致命名空间 (a=True, b=True, input=['fileone', 'filetwo', 'filethree'])
,但看不到如何做到这一点 - 如果确实可以的话。如果可能的话,我在文档或谷歌中看不到任何一种方式或另一种方式,尽管它很有可能(可能?)我忽略了一些东西。有人有什么建议吗?
最佳答案
您不能以这种方式将开关(即 -a
和 -b
)与位置参数(即 fileone、filetwo 和 filethree)交错。开关必须出现在位置参数之前或之后,而不是介于两者之间。
另外,为了有多个位置参数,您需要为 add_argument
指定 nargs
参数。例如:
parser.add_argument('input', nargs='+')
这告诉 argparse
使用一个或多个位置参数并将它们附加到列表中。见 argparse documentation了解更多信息。有了这一行,代码:
parser.parse_args(['-a', '-b', 'fileone', 'filetwo', 'filethree'])
结果:
Namespace(a=True, b=True, input=['fileone', 'filetwo', 'filethree'])
关于python - Python 和 argparse 的多个位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5373474/