首页 > 代码库 > Python--命令行参数解析Demo

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 = True32         error_messages = []33         host_ip = options.host_ip34         is_run = options.is_run35         show_type = options.show_type36         if not host_ip:37             error_messages.append("host_ip must be set;")38             is_valid_paras = False39         if show_type not in [0, 1]:40             error_messages.append("show_type only can be 0 or 1;")41             is_valid_paras = False42 43         if is_valid_paras:44             user_paras = {"host_ip": host_ip, "is_run": is_run, "show_type": show_type}45             return user_paras46         else:47             for error_message in error_messages:48                 print(error_message)49             return None50     except Exception as ex:51         print("exception :{0}".format(str(ex)))52         return None53 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 configclass RunConfig(object):    is_run = True    show_status = 1    host_ip = "192.167.1.1"    run_scripts = """SELECT *FROM TB001WHERE ID >1000AND C1<300"""

然后在其他文件中访问:

# -*- coding:utf8 -*-from run_config import RunConfigdef 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--命令行参数解析Demo