您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 命令行arg通过内省解析

5b51 2022/1/14 8:21:26 python 字数 4329 阅读 469 来源 www.jb51.cc/python

我正在开发一个管理脚本,通过大量的命令行选项完成相当多的工作.脚本的前几次迭代使用optparse来收集用户输入,然后向下运行页面,以适当的顺序测试每个选项的值,并在必要时执行操作.这导致了一个非常难以阅读和维护的密码丛林.我正在寻找更好的东西.我希望有一个系统,我可以用或多或少的正常python方式编写函数,然后在运行脚本时,从我的函数生成选项(和帮助文本

概述

我正在开发一个管理脚本,通过大量的命令行选项完成相当多的工作.脚本的前几次迭代使用optparse来收集用户输入,然后向下运行页面,以适当的顺序测试每个选项的值,并在必要时执行操作.这导致了一个非常难以阅读和维护的密码丛林.

我正在寻找更好的东西.

我希望有一个系统,我可以用或多或少的正常python方式编写函数,然后在运行脚本时,从我的函数生成选项(和帮助文本),解析并以适当的顺序执行.另外,我真的希望能够构建django风格的子命令接口,其中myscript.py安装完全独立于myscript.py remove(单独的选项,帮助等)

我找到了simon willison’s optfunc并且它确实做了很多,但似乎只是错过了标记 – 我想把每个OPTION写成一个函数,而不是试图将整个选项集压缩成一大串选项.

我想象一个架构涉及一组主要功能的类,以及每个与命令行中特定选项对应的类的定义方法.这种结构的优点是每个选项都位于它修改功能代码附近,从而简化了维护.我不知道如何处理的事情是命令的排序,因为类方法的排序不是确定性的.

在我重新发明轮子之前:还有其他现有的代码行为类似吗?其他容易修改的东西?问这个问题已经澄清了我自己对什么是好的想法,但是反馈为什么这是一个可怕的想法,或者它应该如何工作将是受欢迎的.

每个“命令”或“选项”是具有两组方法功能属性的对象.

>提供设置信息以进行optparse.
>其实做的工作.

这是所有命令的超类

class Command( object ):
    name= "name"
    def setup_opts( self,parser ):
        """Add any options to the parser that this command needs."""
        pass
    def execute( self,context,options,args ):
        """Execute the command in some application context with some options and args."""
        raise NotImplemented

您可以为安装和删除以及所需的所有其他命令创建子库.

您的整体应用程序看起来像这样.

commands = [ 
    Install(),Remove(),]
def main():
    parser= optparse.OptionParser()
    for c in commands:
        c.setup_opts( parser )
    options,args = parser.parse()
    command= None
    for c in commands:
        if c.name.startswith(args[0].lower()):
            command= c
            break
    if command:
        status= command.execute( context,args[1:] )
    else:
        logger.error( "Command %r is unkNown",args[0] )
        status= 2
    sys.exit( status )

总结

以上是编程之家为你收集整理的python – 命令行arg通过内省解析全部内容,希望文章能够帮你解决python – 命令行arg通过内省解析所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶