【Python123】OptionParser初使用

 

 

分析项目的deploy.py实例来学习。

 

1. OptionParser

片段:

def init_arg_parser():
    parser = OptionParser("operation with shark")
    parser.add_option("-o", "--operation",
                      help="target <operation> to be perform [precheck,checkconfig,sethcpkey,setuvakey,install,uninstall,checkinstall]", )

    parser.add_option("-e", "--environment", help="target <environment> to be installed, like 'pro', 'dr', 'dev'...")
    parser.add_option("-m", "--module", help="target module to be installed,[bin, conf]")
    parser.add_option("-v", "--version", help="the target version to be installed")
    parser.add_option("-r", "--release", help="the release number of the RPM package", default="1")
    parser.add_option("-i", "--base_directory", help="the path of base directory for installation", default="/apps")
    parser.add_option("-a", "--artifactory", help="nexus or artifactory", default="artifactory")
    parser.add_option("-b", "--buildnumber", help="build number", default="1")
    parser.add_option("-p", "--rpm_db", help="rpm db path")

    parser.add_option("-s", "--source_pkg_path",
                      help="the full path of local package to be installed, or will download from remote by script")

    parser.add_option("-D", "--debug", help="debug mode", action="store_true")
    (options, args) = parser.parse_args()
    return options

参考:

https://blog.csdn.net/lwnylslwnyls/article/details/8199454

 

2. lambda

片段:

...

    env = lambda: args.environment if args.environment \
        else _raise_attribute_error("[-e/--environment] is required for operation: %s" % args.operation)

    version = lambda: args.version if args.version \
        else _raise_attribute_error("[-v/--version] is required for operation: %s" % args.operation)

    # shark-bin/shark-conf
    pkg_name = lambda: '%s-%s' % (DEFAULT_APP_NAME, args.module) if args.module \
        else _raise_attribute_error("[-m/--module] is required for operation: %s" % args.operation)
        
    rpm_db = lambda: args.rpm_db if args.rpm_db \
        else '%s/%s/' % (args.base_directory, RPM_DB)
    
    artifactory = lambda: args.artifactory if args.artifactory \
        else _raise_attribute_error("[-a/--artifactory] is required for operation: %s" % args.operation)
        
    buildnumber = lambda: args.buildnumber if args.buildnumber \
        else _raise_attribute_error("[-a/--buildnumber] is required for operation: %s" % args.operation)
...

lambda作为一个表达式,定义了一个全局匿名函数。

lambda的使用大量简化了代码,使代码简练清晰。但这会在一定程度上降低代码的可读性。

lambda存在意义就是对简单函数的简洁表示。

参考:

https://www.cnblogs.com/caizhao/p/7905094.html

posted @ 2019-12-11 15:11  CathyGao2018  阅读(295)  评论(0编辑  收藏  举报