停止解析第一个未知参数

时间:2011-07-14 01:50:18

标签: python argparse

使用argparse,是否可以在第一个未知参数处停止解析参数?

我找到了两个差不多的解决方案;

  1. parse_known_args,但这允许在第一个未知参数之后检测已知参数。
  2. nargs=argparse.REMAINDER,但在第一个非选项参数之前,这不会停止解析。此前任何无法识别的选项都会生成错误。
  3. 我忽略了什么吗?我应该使用argparse吗?

2 个答案:

答案 0 :(得分:2)

我自己没有使用argparse(需要保持我的代码2.6兼容),但是通过文档查看,我认为你没有错过任何东西。

所以我不得不想知道为什么你希望argparse停止解析参数,以及为什么--伪参数不能完成这项工作。 From the docs:

  

如果您的位置参数必须以'-'开头并且看起来不像负数,则可以插入伪参数'--',告诉parse_args()之后的所有内容都是位置论证:

>>> parser.parse_args(['--', '-f'])
Namespace(foo='-f', one=None)

答案 1 :(得分:0)

一种方法,尽管它可能不是在所有情况下都是完美的,但使用 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 遇到非选项参数,它将停止处理参数。

相关问题