Dav*_*sky 22 python command-line-interface
是否有用于执行 gem/git样式命令行参数的Python模块?我的意思是gem/git风格是:
$ ./MyApp.py
The most commonly used MyApp commands are:
add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
...
$ ./MyApp.py branch
* current-branch
master
Run Code Online (Sandbox Code Playgroud)
没有参数,输出会告诉您如何继续.还有一个特殊的"帮助"命令:
$ ./MyApp.py help branch
Run Code Online (Sandbox Code Playgroud)
这将为您提供有关"分支"命令的更深入的提示.
编辑: 通过执行我的意思是它为您执行使用打印,退出无效输入,根据您的CLI规范运行您的功能.为命令行排序"URL映射器".
Rik*_*ggi 34
在子命令部分中已经很好地解释了这一点.
从那里复制其中一个例子:
>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers()
>>> checkout = subparsers.add_parser('checkout', aliases=['co'])
>>> checkout.add_argument('foo')
>>> parser.parse_args(['checkout', 'bar'])
Namespace(foo='bar')
Run Code Online (Sandbox Code Playgroud)
编辑:不幸的是,没有自生成的特殊help命令,但是您可以获得详细的帮助消息(您似乎想要)-h或者--help通常在命令之后使用:
$ ./MyApp.py branch --help
Run Code Online (Sandbox Code Playgroud)
通过详细说明我并不是说这就像一个手册页,它就像其他任何--help一种帮助:列出所有的参数等等......
例:
>>> parser = argparse.ArgumentParser()
>>> subparsers = parser.add_subparsers(description='Sub description')
>>> checkout = subparsers.add_parser('checkout', description='Checkout description')
>>> checkout.add_argument('foo', help='This is the foo help')
>>> parser.parse_args(['checkout', '--help'])
usage: checkout [-h] foo
Checkout description
positional arguments:
foo This is the foo help
optional arguments:
-h, --help show this help message and exit
Run Code Online (Sandbox Code Playgroud)
如果需要,应该很容易实现help重定向到的命令--help.
获得 gem/git 风格的“帮助”行为的合理黑客(我只是为我正在做的事情写了这个):
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='sub_commands')
parser_branch = subparsers.add_parser('branch', description='list of branches')
parser_help = subparsers.add_parser('help')
parser_help.add_argument('command', nargs="?", default=None)
# I can't find a legitimate way to set a default subparser in the docs
# If you know of one, please let me know!
if len(sys.argv) < 2:
sys.argv.append('--help')
parsed = parser.parse_args()
if parsed.sub_commands == "help":
if not parsed.command:
parser.parse_args(['--help'])
else:
parser.parse_args([parsed.command, '--help'])
Run Code Online (Sandbox Code Playgroud)
argparse绝对是我遇到的 optparse 和其他 python 解决方案的一个进步。但是 IMO 处理 args 的 gem/git 风格只是一种更合乎逻辑和更安全的做事方式,因此不支持它很烦人。
| 归档时间: |
|
| 查看次数: |
5293 次 |
| 最近记录: |