ana*_*nik 7 python optparse argparse
对于子命令,argparse/optparse是否有任何直观的替代方法?他们都很糟糕 - 这是疯狂的配置或疯狂的输出.
真实世界的例子(被盗,不想要):
>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(title='subcommands',
... description='valid subcommands',
... help='additional help')
>>> subparsers.add_parser('foo')
>>> subparsers.add_parser('bar')
>>> parser.parse_args(['-h'])
usage: [-h] {foo,bar} ...
optional arguments:
-h, --help show this help message and exit
subcommands:
valid subcommands
{foo,bar} additional help
Run Code Online (Sandbox Code Playgroud)
通缉:
>>> parser = cmdline.Parser(
... tplheader='Usage: tool [command] [options]',
... tplcommandhead='Available commands:',
... tplfooter='Use \"tool help\" to get full list of supported commands.')
>>> parser.add('foo', help='foo.')
>>> parser.add('bar', help='bar.')
>>> parser.parse(['-h'])
Usage: tool [command] [options]
Available commands:
foo foo.
bar bar.
Use "tool help" to get full list of supported commands.
Run Code Online (Sandbox Code Playgroud)
更新:我接受提供命令验证和解析示例的答案,该示例将帮助消息与最后一个片段完全相同.
只需更改一下argparse代码,就可以非常接近所请求的输出:
usage参数来设置用法文本ArgumentParser.description和help参数add_subparsers.title参数更改为Available subcommands.metavar参数覆盖难看的{foo,bar}文本.help可用的参数add_parser.这是成品:
import argparse
parser = argparse.ArgumentParser(usage='tool [command] [options]')
subparsers = parser.add_subparsers(title='Available commands', metavar='')
subparsers.add_parser('foo', help='foo.')
subparsers.add_parser('bar', help='bar.')
parser.parse_args(['-h'])
Run Code Online (Sandbox Code Playgroud)
那段代码打印出来:
usage: tool [command] [options]
optional arguments:
-h, --help show this help message and exit
Available commands:
foo foo.
bar bar.
听起来你正在寻找argh。
这是主页上演示文稿的片段。
具有多个命令的潜在模块化应用程序:
import argh
# declaring:
def echo(text):
"Returns given word as is."
return text
def greet(name, greeting='Hello'):
"Greets the user with given name. The greeting is customizable."
return greeting + ', ' + name
# assembling:
parser = argh.ArghParser()
parser.add_commands([echo, greet])
# dispatching:
if __name__ == '__main__':
parser.dispatch()
Run Code Online (Sandbox Code Playgroud)
当然有效:
$ ./app.py greet Andy
Hello, Andy
$ ./app.py greet Andy -g Arrrgh
Arrrgh, Andy
Run Code Online (Sandbox Code Playgroud)
网站上的帮助消息略有删节。这是它实际为我输出的内容(argh0.26.1)。
$ ./app.py --help
usage: app.py [-h] {greet,echo} ...
positional arguments:
{greet,echo}
echo Returns given word as is.
greet Greets the user with given name. The greeting is customizable.
optional arguments:
-h, --help show this help message and exit
Run Code Online (Sandbox Code Playgroud)