使用argparse
,是否可以在第一个未知参数处停止解析参数?
我找到了 2 个几乎解决方案;
parse_known_args
,但这允许在第一个未知参数之后检测已知参数。nargs=argparse.REMAINDER
, 但这不会停止解析,直到第一个非选项参数。在此之前无法识别的任何选项都会生成错误。
我忽略了什么吗?我应该使用argparse
吗?
使用argparse
,是否可以在第一个未知参数处停止解析参数?
我找到了 2 个几乎解决方案;
parse_known_args
,但这允许在第一个未知参数之后检测已知参数。nargs=argparse.REMAINDER
, 但这不会停止解析,直到第一个非选项参数。在此之前无法识别的任何选项都会生成错误。我忽略了什么吗?我应该使用argparse
吗?
我没有使用过argparse
自己(需要保持我的代码与 2.6 兼容),但是查看文档,我认为您没有遗漏任何内容。
所以我不得不想知道你为什么要argparse
停止解析参数,以及为什么--
伪参数不能完成这项工作。从文档:
如果您的位置参数必须以负数开头
'-'
并且看起来不像负数,则可以插入伪参数'--'
,它告诉parse_args()
后面的所有内容都是位置参数:
>>> parser.parse_args(['--', '-f'])
Namespace(foo='-f', one=None)
一种方法是使用它,尽管它可能并非在所有情况下都是完美的getopt
。
例如:
import sys
import os
from getopt import getopt
flags, args = getopt(sys.argv[1:], 'hk', ['help', 'key='])
for flag, v in flags:
if flag in ['-h', '--help']:
print(USAGE, file=sys.stderr)
os.exit()
elif flag in ['-k', '--key']:
key = v
一旦getopt
遇到非选项参数,它将停止处理参数。