在 Python
argparse
模块的文档中,3.8 文档 指出 nargs
可以设置为:
。所有剩余的命令行参数都收集到一个列表中。这对于分派到其他命令行实用程序的命令行实用程序通常很有用。argparse.REMAINDER
这已从 3.9 文档中删除,尽管没有提到它已被弃用,也没有任何充分的理由这样做,因为它提供了其他方式显然没有提供的有用功能。仍然在页面的其他地方提到过:
这些[混合]解析器不支持所有 argparse 功能,如果使用不支持的功能,将会引发异常。特别是,不支持子解析器、argparse.REMAINDER 以及包含选项和位置的互斥组。但即使如此,[3.10 文档] 中也删除了这一点。然而,即使在最新发布的 Python 3.11.4 版本中,该功能仍然存在。
那么为什么它从文档中删除了?
nargs=REMAINDER
与
nargs='*'
不同:使用
REMAINDER
意味着 argparse 从那时起将不再尝试解析选项(从
-
开始)。因此,对于
REMAINDER
,
mycmd -q run bash -c exit
不会尝试将
-c
解析为
mycmd
的选项,而是将该行视为
mycmd -q run -- bash -c exit
与
'*'
一起使用。[3.10文档]
REMAINDER
参数放在前面)破坏了它。
已经可以使用parser.parse_known_args()
来捕获未解析的参数,因此
REMAINDER
既是另一个功能的重复,并且比它更少经过测试和深思熟虑。请参阅
here 和 here 了解删除文档的 PR。