zoukankan      html  css  js  c++  java
  • 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()

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

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

  • 相关阅读:
    (总结)CentOS Linux搭建SVN Server配置详解
    面试感悟----一名3年工作经验的程序员应该具备的技能
    SQL server 2008数据库的备份与还原(转)
    MyEclipse XX安装jad反编译插件
    c语言实现对传统单链表的创建、添加 遍历 删除 反转元素操作
    转>>Java工程师成神之路
    Programming reference for JavaScript
    elastic-job 的简单使用
    JAVA使用Ldap操作AD域
    nginx之location(root/alias)
  • 原文地址:https://www.cnblogs.com/TeyGao/p/5964204.html
Copyright © 2011-2022 走看看