gpt4 book ai didi

python - argparse:位置参数之间的可选参数

转载 作者:行者123 更新时间:2023-12-04 11:26:43 30 4
gpt4 key购买 nike

我想模拟大多数命令行实用程序的行为,其中可选参数可以放在命令行中的任何位置,包括位置参数之间,例如 mkdir例子:

mkdir before --mode 077 after
在这种情况下,我们知道 --mode正好接受 1 个参数,所以 beforeafter两者都被视为位置参数。可选部分, --mode 077 , 真的可以放在命令行的任何地方。
但是,与 argparse ,以下代码不适用于此示例:
# mkdir.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--mode', nargs=1)
parser.add_argument('dirs', nargs='*')
args = parser.parse_args()
运行 ./mkdir.py before --mode 077 after结果是:
mkdir.py: error: unrecognized arguments: after
我怎样才能得到 argparse接受位置参数之间的可选参数(具有固定的、已知数量的项目)?

最佳答案

Python 3.7 开始,好像argparse现在支持这种 Unix 风格的解析:

Intermixed parsing

ArgumentParser.parse_intermixed_args(args=None, namespace=None)

A number of Unix commands allow the user to intermix optional arguments with positional arguments. The parse_intermixed_args() and parse_known_intermixed_args() methods support this parsing style.


有一个警告,但对于“简单”选项,它不会影响它们:

These parsers do not support all the argparse features, and will raise exceptions if unsupported features are used. In particular, subparsers, argparse.REMAINDER, and mutually exclusive groups that include both optionals and positionals are not supported.


(我花了 1 个小时试图理解为什么 Python argparse 文档中的示例似乎没有包含它之后发布了这个常见问题风格的问题,只是偶然发现了一个有点不相关的问题,其中提到了这个“混合"在评论中起作用,我无法再次找到以正确引用它。)

关于python - argparse:位置参数之间的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64070651/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com