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()

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

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

  • 相关阅读:
    系统维护相关问题
    Python环境维护
    哈希表解决字符串问题
    论文笔记二:《A Tutoral on Spectral Clustering》
    论文笔记之哈希学习比较--《Supervised Hashing with Kernels》《Towards Optimal Binary Code Learning via Ordinal Embedding》《Top Rank Supervised Binary Coding for Visual Search》
    Java中String、StringBuffer、StringBuilder的比较与源 代码分析
    浙大pat1040 Longest Symmetric String(25 分)
    浙大pat1039 Course List for Student(25 分)
    浙大pat---1036 Boys vs Girls (25)
    百炼oj-4151:电影节
  • 原文地址:https://www.cnblogs.com/TeyGao/p/5964204.html
Copyright © 2011-2022 走看看