如何删除 argparse 中使用行末尾的三点
How can I remove three-dots at the end of usage line in argparse
Python argparse
继续在 usage:
行的末尾放置 space 和三点 ( ...
),示例:usage: program.sh [-h] command [<options>...] ...
.是否可以删除它们?
示例代码:
def helper():
parser = argparse.ArgumentParser(
"program.py",
)
subparsers = parser.add_subparsers(dest="command", metavar="command [<options>...]")
driver = subparsers.add_parser(
"driver", help="Example script")
driver.add_argument("--bn", type=int, default=0, help="Block number to start fetch blocks from")
return parser
输出:
$ ./program.sh --help
usage: program.sh [-h] command [<options>...] ...
直接回答:您可以编写自己的使用摘要:
parser = argparse.ArgumentParser(
"program.py",
usage="usage: %(prog)s [-h] command [<options>...]",
)
但是,有些东西对我来说没有意义。
...
是由于使用子解析器造成的。通常每个命令有一个子解析器,例如:3 个命令,即 3 个子解析器:
Usage:
myprog cmd1 [options and args specific for cmd1]
myprog cmd2 [different options and args for cmd2]
myprog cmd3 [yet another set of options and args]
这很难用一行来概括,除了:
Usage: myprog command ...
除非您没有为命令使用任何选项和参数,这意味着没有什么可解析的。
因此,如果您想去掉结尾的 ...
并仍然有一个有效的用法概要,您可能根本不需要子解析器。
该用法是由 subparsers
参数的隐含 nargs
产生的,'A...'。
如果我使用相同的 nargs 创建位置参数,我会得到同样的结果:
In [393]: import argparse
In [394]: p = argparse.ArgumentParser()
In [395]: p.add_argument('foo',nargs=argparse.PARSER)
Out[395]: _StoreAction(option_strings=[], dest='foo', nargs='A...', const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [396]: p.print_help()
usage: ipython3 [-h] foo ...
positional arguments:
foo
optional arguments:
-h, --help show this help message and exit
注意 Out[395]
中的 nargs
字符串。 add_subparsers
使用 'A...' nargs
值创建位置参数。
In [403]: p = argparse.ArgumentParser()
In [404]: p.add_subparsers(dest='foo', metavar='FOO')
Out[404]: _SubParsersAction(option_strings=[], dest='foo', nargs='A...', const=None, default=None, type=None, choices={}, help=None, metavar='FOO')
In [405]: p.print_help()
usage: ipython3 [-h] FOO ...
positional arguments:
FOO
optional arguments:
-h, --help show this help message and exit
即 nargs
需要至少一个字符串,但需要所有剩余的字符串。 add_parser
行将 choices
添加到该子解析器操作。
在格式化它的 usage
时,主解析器对子解析器的工作“一无所知”。对它来说,subparsers
参数只是 choices
的另一个位置参数。解析时也是如此。它只是用剩余的 argv
字符串执行 suparsers.__call__
。这又将它们传递给所选的 parser
.
Python argparse
继续在 usage:
行的末尾放置 space 和三点 ( ...
),示例:usage: program.sh [-h] command [<options>...] ...
.是否可以删除它们?
示例代码:
def helper():
parser = argparse.ArgumentParser(
"program.py",
)
subparsers = parser.add_subparsers(dest="command", metavar="command [<options>...]")
driver = subparsers.add_parser(
"driver", help="Example script")
driver.add_argument("--bn", type=int, default=0, help="Block number to start fetch blocks from")
return parser
输出:
$ ./program.sh --help
usage: program.sh [-h] command [<options>...] ...
直接回答:您可以编写自己的使用摘要:
parser = argparse.ArgumentParser(
"program.py",
usage="usage: %(prog)s [-h] command [<options>...]",
)
但是,有些东西对我来说没有意义。
...
是由于使用子解析器造成的。通常每个命令有一个子解析器,例如:3 个命令,即 3 个子解析器:
Usage:
myprog cmd1 [options and args specific for cmd1]
myprog cmd2 [different options and args for cmd2]
myprog cmd3 [yet another set of options and args]
这很难用一行来概括,除了:
Usage: myprog command ...
除非您没有为命令使用任何选项和参数,这意味着没有什么可解析的。
因此,如果您想去掉结尾的 ...
并仍然有一个有效的用法概要,您可能根本不需要子解析器。
该用法是由 subparsers
参数的隐含 nargs
产生的,'A...'。
如果我使用相同的 nargs 创建位置参数,我会得到同样的结果:
In [393]: import argparse
In [394]: p = argparse.ArgumentParser()
In [395]: p.add_argument('foo',nargs=argparse.PARSER)
Out[395]: _StoreAction(option_strings=[], dest='foo', nargs='A...', const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [396]: p.print_help()
usage: ipython3 [-h] foo ...
positional arguments:
foo
optional arguments:
-h, --help show this help message and exit
注意 Out[395]
中的 nargs
字符串。 add_subparsers
使用 'A...' nargs
值创建位置参数。
In [403]: p = argparse.ArgumentParser()
In [404]: p.add_subparsers(dest='foo', metavar='FOO')
Out[404]: _SubParsersAction(option_strings=[], dest='foo', nargs='A...', const=None, default=None, type=None, choices={}, help=None, metavar='FOO')
In [405]: p.print_help()
usage: ipython3 [-h] FOO ...
positional arguments:
FOO
optional arguments:
-h, --help show this help message and exit
即 nargs
需要至少一个字符串,但需要所有剩余的字符串。 add_parser
行将 choices
添加到该子解析器操作。
在格式化它的 usage
时,主解析器对子解析器的工作“一无所知”。对它来说,subparsers
参数只是 choices
的另一个位置参数。解析时也是如此。它只是用剩余的 argv
字符串执行 suparsers.__call__
。这又将它们传递给所选的 parser
.