使用 python argparse 解析有限开关

Parsing limited switches with python argparse

有没有办法使用 argparse 只解析函数中有限数量的开关?说吧,我的命令是:

python sample.py -t abc -r dfg -h klm -n -p qui

而且我希望 argparse 从 -t 解析到 -h 并保留其余部分,也仅显示对这些的帮助。 接下来我想将 -h 之后的任何开关解析为另一个函数并在那里查看相应的帮助。

这种行为在 argparse 中可能吗?还有一种方法可以修改它在内部使用的 sys.arg 吗? 谢谢。

您可以随时修改 sys.args 并在此处放置任何您想要的内容。

至于你的主要问题,你可以有两个解析器。其中一个将有参数 -t-h,第二个将有参数 -n-p。然后你可以在每个解析器上使用 argparseparse_known_args() 方法,它将只解析为每个解析器定义的参数。

python sample.py -t abc -r dfg -h klm -n -p qui

And I want argparse to parse from -t to -h and leave the remaining, also show help for these only. Next I want to parse any switch after -h into another function and see corresponding help there.

您的规范存在一些问题:

-h是正规帮助吗?如果是这样,它具有优先权,生成 help 而不解析其他参数。 -h 之后的字符串表明您将其视为普通用户定义参数,然后需要在关闭帮助的情况下启动解析器。但是那你怎么要求 help?

是什么设置了两者之间的中断 parsings/help?参数的数量、-h 标志(无论顺序如何)或标志的 id。请记住 argparse 接受任何顺序的标记参数。

您可以定义一个了解 -t-r 的解析器,以及另一个处理 -n-p 的解析器。使用 parse_known_args 调用每个函数可以使其在不引发 unknown argument 错误的情况下运行。

您还可以修改sys.argvparse_args(和已知变体)采用可选的 argv 参数。如果是 none,则它使用 sys.argv[1:]。因此,您可以修改 sys.argv 本身(删除项目),也可以将 sys.argv 的子集传递给解析器。

parser1.parse_known_args(sys.argv[1:5])
parser2.parse_known_args(['-n','one','-o','two'])
parser3.parse_args(sys.argv[3:])

尝试这些想法,如果还有其他问题,请回来找我们。