【问题标题】:Stop parsing on first unknown argument停止解析第一个未知参数
【发布时间】:2011-10-04 23:35:11
【问题描述】:

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

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

  1. parse_known_args,但这允许在第一个未知参数之后检测已知参数。
  2. nargs=argparse.REMAINDER,但这不会停止解析,直到第一个非选项参数。在此之前的任何无法识别的选项都会产生错误。

我是否忽略了什么?我应该使用argparse 吗?

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    我自己没有使用过argparse(需要保持我的代码与 2.6 兼容),但是查看文档,我认为您没有遗漏任何内容。

    所以我想知道为什么你想让argparse 停止解析参数,以及为什么-- 伪参数不起作用。 From the docs:

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

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

    【讨论】:

    • 这实际上完成了工作。谢谢。
    • 在我的情况下,-- 不会完成这项工作,因为我不想强迫我的用户在某些情况下而不是在其他情况下在他们的命令中添加--:p跨度>
    • 然后告诉他们每次都使用它。例如,Git 强烈建议在列出 git checkout 中的路径之前使用--。此外,没有人强迫你总是把它放进去;当参数可能被误解为选项时,它就在那里。
    • 在 git checkout 的情况下,“--”是必要的,以消除参数是树型还是路径规范的歧义(除非两者都提供)。此外,如果我想要 bash 中的 -c 选项或 xterm 中的 -e 之类的东西,其中一个标志表示应使用所有剩余的参数,包括以“-”开头的参数?
    【解决方案2】:

    一种方法是使用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 遇到非选项参数,它将停止处理参数。

    【讨论】:

      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      相关资源
      最近更新 更多