• Python--命令行参数解析Demo


    写没有操作界面的程序时,最讨厌的就是参数解析问题,尤其是很多参数那种,下面是一个小Demo,拿出来与各位分享:

     1 # -*- coding:utf8 -*-
     2 import os
     3 import datetime
     4 import sys
     5 from optparse import OptionParser
     6 
     7 
     8 def get_user_paras():
     9     try:
    10         opt = OptionParser()
    11         opt.add_option('--host_ip',
    12                        dest='host_ip',
    13                        type=str,
    14                        help='the ip of the check host')
    15         opt.add_option('--run',
    16                        action="store_true",
    17                        dest="is_run",
    18                        default=False,
    19                        help="run the scripts")
    20         opt.add_option('--view',
    21                        action="store_false",
    22                        dest="is_run",
    23                        default=False,
    24                        help="only view but not run the scripts")
    25         opt.add_option('--show_type',
    26                        dest="show_type",
    27                        type=int,
    28                        default=0,
    29                        help="0 or 1, 0 only show the simple data, 1 show the full data")
    30         (options, args) = opt.parse_args()
    31         is_valid_paras = True
    32         error_messages = []
    33         host_ip = options.host_ip
    34         is_run = options.is_run
    35         show_type = options.show_type
    36         if not host_ip:
    37             error_messages.append("host_ip must be set;")
    38             is_valid_paras = False
    39         if show_type not in [0, 1]:
    40             error_messages.append("show_type only can be 0 or 1;")
    41             is_valid_paras = False
    42 
    43         if is_valid_paras:
    44             user_paras = {"host_ip": host_ip, "is_run": is_run, "show_type": show_type}
    45             return user_paras
    46         else:
    47             for error_message in error_messages:
    48                 print(error_message)
    opt.print_help()
    49 return None 50 except Exception as ex: 51 print("exception :{0}".format(str(ex))) 52 return None 53 54 55 def main(): 56 user_paras = get_user_paras() 57 if user_paras is None: 58 sys.exit(0) 59 info = "host_ip:{0}, is_run:{1}, show_type:{2}" 60 info = info.format(user_paras["host_ip"], 61 user_paras["is_run"], 62 user_paras["show_type"]) 63 print(info) 64 65 66 if __name__ == '__main__': 67 main()

    当使用OptionParser时,会自动增加--help和-h参数,也会自动生成参数帮助,如:

    对于代码:

    opt.add_option('--run',
                   action="store_true",
                   dest="is_run",
                   default=False,
                   help="run the scripts")

    --run 表示参数名

    action表示将参数值如何处理,常用的有store/store_true/store_false,store即字面意思,store_true即将True作为参数值传递给参数,store_false将False作为参数值传递给参数

    dest表示命令行参数解析后的参数名,

    上面代码中--run作为命令行参数传递进来,由于action为store_true,因此参数值为True,解析后的参数名为is_run,通过(options, args) = opt.parse_args() 赋值后,便可以使用options.is_run来放问参数值。

    更多帮助:https://docs.python.org/2/library/optparse.html

    ##========================================================##

    对于参数较多或者参数值较大的情况,个人还是比较喜欢使用参数配置文件来实现,简单而且方便编辑,如创建一个run_config.py文件:

    # -*- coding:utf8 -*-
    
    
    # run config
    class RunConfig(object):
        is_run = True
        show_status = 1
        host_ip = "192.167.1.1"
        run_scripts = """
    SELECT *
    FROM TB001
    WHERE ID >1000
    AND C1<300
    """

    然后在其他文件中访问:

    # -*- coding:utf8 -*-
    from run_config import RunConfig
    
    
    def main():
        print("is_run:{0},  host_ip:{1}".format(RunConfig.is_run,RunConfig.host_ip))
        print("run_scripts:{0}".format(RunConfig.run_scripts))
    
    
    if __name__ == '__main__':
        main()

    简单粗暴,没那么麻烦,土豹子的做法哈!

    ##===================================================##

  • 相关阅读:
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之六 多点触控
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之九 定位
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之七 重力感应
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之五 保存数据的几种方式
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之八 照相机
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之三 Application 配置详解
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之四 打开与关闭应用程序是的保存数据
    ADOBE FLASH BUILDER 4.6 IOS 开发之部署与调试
    [译] 高性能JavaScript 1至5章总结
    页签及盒子的web标准实现
  • 原文地址:https://www.cnblogs.com/TeyGao/p/5964204.html
Copyright © 2020-2023  润新知