python - Python 和 argparse 的多个位置参数

标签 python argparse

我正在尝试使用 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/

相关文章:

python - 如何在 Pythonbrew 中使用带空格的位置参数?

python - 运行 Luigi 工作流程时没有可视化依赖图

python - jupyter 笔记本到 python 脚本,无需更改格式

python - 在 python 中获得大特征向量的最近 10 个欧几里德邻居的最快方法

python - 将 json 字符串传递给参数解析器 python

python - 如何使用 'argparse' 指定两个必需参数(包括子命令)?

python - 如何将互斥参数作为变量传递

python - 传递给操作的参数名称是什么? (参数解析)

python - TypeError at/login login() 缺少 1 个必需的位置参数 : 'User'

python - 如何在 NetworkX 或 igraph 中使用多部分图?