【问题标题】:Suppressing option processing after a non-option command-line argument在非选项命令行参数之后抑制选项处理
【发布时间】:2020-08-20 15:03:12
【问题描述】:

我正在编写一个包装程序,它接受将要传递给另一个程序的参数列表,以及一些特定于我的包装器的选项。为了避免混淆哪些选项去哪里,我希望出现任何非选项参数来禁止将进一步的参数作为选项处理,就好像 -- 参数出现在它之前一样。换句话说,类似于xterm -e 所做的事情。

在 Python 中完成此任务的最佳方法是什么?我更喜欢使用argparse 的解决方案,而不是手动解析命令行。

【问题讨论】:

标签: python command-line argparse


【解决方案1】:

使用nargs=argparse.REMAINDERnargs=argparse.PARSER。后者的不同之处在于它使剩余的参数成为必需的。 (它看起来也像是一个实现细节,所以实际使用它可能不是那么明智。)

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('argv', nargs=argparse.REMAINDER)
>>> parser.add_argument('--foo', action='store_const', const=True)
>>> print(parser.parse_args(['--foo', 'a', '--foo', 'b']))
Namespace(argv=['a', '--foo', 'b'], foo=True)
>>> print(parser.parse_args(['--foo']))
Namespace(argv=[], foo=True)

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('argv', nargs=argparse.PARSER)
>>> parser.add_argument('--foo', action='store_const', const=True)
>>> print(parser.parse_args(['--foo', 'a', '--foo', 'b']))
Namespace(argv=['a', '--foo', 'b'], foo=True)
>>> print(parser.parse_args(['--foo']))
usage: [-h] [--foo] argv ...
: error: the following arguments are required: argv

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 2023-03-13
    • 2020-07-20
    • 1970-01-01
    • 2018-03-05
    • 2010-09-28
    • 2014-06-28
    相关资源
    最近更新 更多