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()
简单粗暴,没那么麻烦,土豹子的做法哈!
##===================================================##
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现