遇到第一个未知参数时停止解析
使用 argparse
这个库,能不能在遇到第一个不认识的参数时就停止解析其他参数呢?
我找到两个差不多的解决办法:
parse_known_args
,这个方法可以识别已知的参数,但在遇到第一个不认识的参数后,仍然会继续检测后面的已知参数。nargs=argparse.REMAINDER
,这个方法会在遇到第一个非选项参数时停止解析,但如果之前有不认识的选项参数,就会报错。
我是不是漏掉了什么?我真的需要用 argparse
吗?
2 个回答
1
有一种方法可以做到这一点,虽然在所有情况下可能不是最完美的,就是使用 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
遇到一个不是选项的参数,它就会停止处理后面的参数。
2
我自己没有用过 argparse
(因为我需要让我的代码兼容2.6版本),不过我看了一下文档,感觉你没有漏掉什么。
所以我想知道你为什么想让 argparse
停止解析参数,以及为什么 --
这个伪参数不能解决你的问题。根据文档:
如果你有一些位置参数,它们必须以
'-'
开头,但看起来又不像负数,你可以插入伪参数'--'
,这会告诉parse_args()
后面的内容都是位置参数:
>>> parser.parse_args(['--', '-f'])
Namespace(foo='-f', one=None)