python – argparse:用于个别位置参数选择的使用情况报告?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – argparse:用于个别位置参数选择的使用情况报告?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2338字,纯文字阅读大概需要4分钟。
内容图文
![python – argparse:用于个别位置参数选择的使用情况报告?](/upload/InfoBanner/zyjiaocheng/784/eaaa900f8c7847679ff0780123ac17d2.jpg)
我正在尝试重构程序以使用新的标准argparse模块.鉴于下面的结构,我应该使用choices作为主要位置参数,subcommands还是其他方法?
foo [OPTION]... COMMAND [PACKAGE(S)]...
Commands:
available - show packages available to be installed
install - download and install packages, including dependencies
remove - uninstall packages
...snip
version - display installed version of package
Options:
-d,--download download only
-i,--ini=FILE use alternate setup.ini
...snip
选择例子,简明扼要清除,但每个命令没有使用帮助:
parser = argparse.ArgumentParser()
commands = "available install remove ... version".split()
parser.add_argument('command', choices=commands,
help="generic help for all 12 commands goes here")
选择在逻辑上与程序更加协调,因为命令行上的命令在所有这些命令之后基本相同.虽然子命令似乎希望我将每个命令作为世界主要对待自己并且涉及代码的3倍.然而,似乎没有一种方法可以在选择中显示每种选择的用法(?)也许有第三条路线我没有看到?
我正在使用python 2.7.
解决方法:
我会选择sub-commands选项.
您不一定需要编写更多代码:构建命令类,每个类都带有自己的设置(在需要时使用继承),在您的Main cli类中实例化主解析器,然后将其交给需要添加/设置它们的命令拥有subparser.
答案很简短,但如果不清楚告诉我,我会添加一个代码示例.
粗略的例子
您应该将命令构建为类:
class Install(BaseCommand):
help = "download and install packages"
@classmethod
def interface(cls, cmd_parser):
cmd_parser.add_argument('--foo')
cmd_parser.set_defaults(cmd=cls) # this line is very important
def start(self, foo=None):
# command execution
你的命令行界面也应该是一个类:
class Main(BaseCli):
def __init__(self):
self.commands = [Install] # just the command classes
self._parser = argparse.ArgumentParser()
self._subparsers = self._parser.add_subparsers()
def load_interface(self):
for cmd in self.commands:
cmd_parser = self.add_command_parser(help=cmd.help)
cmd.interface(cmd_parser)
def add_command_parser(self, *args, **kwargs):
return self._subparsers.add_parser(*args, **kwargs)
def parse_args(self, args=None, namespace=None):
return self._parser.parse_args(args, namespace)
def start_session(self, namespace):
# this will instantiate the appropriate command class
cmd = namespace.cmd()
# and call its start method with the user args
cmd.start(**namespace.__dict__)
要像这样使用:
cli = Main()
cli.load_interface()
args = cli.parse_args()
cli.start_session(args)
请注意,通过这种方法,您将拥有所有的继承权力!
内容总结
以上是互联网集市为您收集整理的python – argparse:用于个别位置参数选择的使用情况报告?全部内容,希望文章能够帮你解决python – argparse:用于个别位置参数选择的使用情况报告?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。