python 2.7 - argparse:可选参数的参数

python 2.7 - argparse: parameters to optional arguments

我有以下代码片段。

parser = argparse.ArgumentParser()
parser.set_defaults(func=lambda x: parser.print_usage())

parser.add_argument('-o', '--overview', help="print overview",
                    action='store_true')

parser.add_argument('-a', '--add', help='add sudo item', nargs='*',
                    dest="ldap_attrs")
parser.add_argument('dn, object_class, attributes', nargs='*')

parser.add_argument('-d', '--delete', help='delete sudo item', dest='action',
                    action='store_const', const=deleteItem)
parsed_args = parser.parse_args()

它打印出以下内容:

usage: sudoadm.py [-h] [-o] [-a [LDAP_ATTRS [LDAP_ATTRS ...]]] [-d]

                  [dn, object_class, attributes [dn, object_class, attributes ...]]

positional arguments:
  dn, object_class, attributes

optional arguments:
  -h, --help            show this help message and exit
  -o, --overview        print overview
  -a [LDAP_ATTRS [LDAP_ATTRS ...]], --add [LDAP_ATTRS [LDAP_ATTRS ...]]
                        add sudo item
  -d, --delete          delete sudo item

我想将位置参数作为 -a 参数的输入参数 (例如:-a dn, object_class, attributes),如果可能的话,在帮助消息中打印位置参数而不是 LDAP_ATTRS(例如:-a [dn, object_class, attributes] )?

定义positional时调用为:

parser.add_argument(dest, nargs='*', help='...', ...)

也就是说,一个非关键字参数是 destargs 中的属性名称。这就是帮助显示的内容。

位置不定义可选参数。 add_argument 语句是分开的。如果您没有定义位置操作,请忽略此 add_argument

在:

parser.add_argument('-a', '--add', help='add sudo item', nargs='*',
                dest="ldap_attrs")

dest 指定 args 中的属性名称,例如args.ldap_attrs。没有它,属性将是 args.add (第一个长标志)。用法是

[-a [ADD [ADD ...]]]

我怀疑你想使用 metavar

parser.add_argument('-a', '--add', help='add sudo item', nargs='*',
                dest="ldap_attrs", metavar=('dn', 'class'))

带“*”的,它只接受 2 个元变量字符串。