如何使 argparse 将所有参数视为位置?

Posted

技术标签:

【中文标题】如何使 argparse 将所有参数视为位置?【英文标题】:How to make argparse treat all arguments as positional? 【发布时间】:2020-12-03 19:14:04 【问题描述】:

如何让argparse 解析器将所有参数视为位置,即使是那些看起来像选项的参数?例如,使用以下定义:

parser.add_argument('cmd', nargs='*', help='The command to run')

我希望能够跑步

prog.py mycomand --foo arg

并将['mycomand', '--foo', 'arg'] 捕获为cmd 参数。

【问题讨论】:

如果您想捕获所有内容,为什么不使用sys.argv[1:] 程序实际上使用了很多子解析器(支持子命令),所以我需要argparse 可以用answer described here还是需要父解析器才能解析好 REMAINDER 和 -- 可用于强制将剩余参数解释为位置参数。查看文档 【参考方案1】:

原来我只需要将nargs='*' 替换为nargs=argparse.REMAINDER。来自docs:

argparse.REMAINDER 所有剩余的命令行参数都被收集到一个列表中。这对于调度到其他命令行实用程序的命令行实用程序通常很有用。

这也可以,但不太方便:

prog.py mycomand -- --foo arg

【讨论】:

以上是关于如何使 argparse 将所有参数视为位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建具有多个位置参数的 argparse 互斥组?

argparse 仅在位置参数之前解析

python之定义参数模块argparse的基本使用

将 sys.argv 转换为位置 argparse 参数?

Python argparse 忽略无法识别的参数

如何在 argparse 中使用带有 nargs='*' 参数的可选位置参数?