概述

在Python的项目开发过程中,我们有时需要为程序提供一些可以通过命令行进行调用的接口。不过,并不是直接使用 command + 当前文件 就ok的,我们需要对其设置可选的各种各样的操作类型。所以,这种情况下我们就有必要对传入的参数进行解析操作。下面就此问题提出几种不同的解决策略,希望于你有益。


版权说明

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Q-WHai
发表日期: 2016年3月18日
链接:http://blog.csdn.net/lemon_tree12138/article/details/50912898
来源:CSDN
更多内容:分类 >> Thinking In Python


目录

文章目录

  • 概述
  • 版权说明
  • 目录
    • @[toc]
  • 朴素字符串匹配方案
    • 分析
    • 优点
    • 缺点
  • getopt模块
    • 简介
    • 实战用例
  • OptionParser模块
    • 简介
      • parser.add_option()参数说明
    • 实战用例
  • Ref
  • 征集

朴素字符串匹配方案

分析

其实此方法可以很直接地表达程序猿们在逻辑这条路走了多远。当然,这并没有包含任何的不敬。
这的确是一种方案,甚至可以说是一种算法。因为其直截了当,所以在程序开发初期,本人也是如此乐此不疲。除了完全的一个一个的命令之外,我们还可以对参数进行json封装,这样就更加体贴了。
关于,这一点我想也不用多说什么的了。还是留一些时间给后面的两种解决方案比较妥当。不过还是可以说说此方案的优点与缺点。

优点

  1. 针对不同的参数进行不同的处理,针对性强

缺点

  1. 因为其针对性太强,所以其复用性太差

getopt模块

简介

此模块是python内置的一个模块。该模块是专门用来处理命令行参数的。
其基本使用格式如下:

opts, args = getopt.getopt(args, shortopts, longopts = [])

对于getopt()方法的第一个参数,就是我们通过命令行传入的参数。不过这里也有一个值得注意的地方,我需要对参数列表进行切片处理。因为我们获得的第一个(args[0])命令行参数是当前文件名称,这并不是我们需要的。
对于getopt()的第二个参数,是shortopts;第三个参数,是longopts
shortopts比如:-h
longopts比如:–help
shortopts是以’-'为前缀的,longopts是以"- -"为前缀的.

我们也可以单独使用短参数。基本使用格式如下:

opts, args = getopt.getopt(sys.argv[1:], "ld:")

实战用例

from __init__ import *def usage():print 'prama_config.py usage:'print '-h, --help:      Print help message.'print '-v, --version:   Print script version'print '-o, --output:    Input an output verb'print '-m, --message:   Send a message to someone.'print '--foo:           Test option 'print '--fre:           Another test option'def version():print 'prama_config.py 1.0.1'def output(args):print 'Hello, %s' % argsdef message(sender, receiver, msg):print("{0} Send a message to {1}, content is \'{2}\'.".format(sender, receiver, msg))def main(argv):try:opts, args = getopt.getopt(argv[1:], 'hvom:', ['help=', 'message=', 'foo=', 'fre='])except getopt.GetoptError, err:print str(err)usage()sys.exit(2)for o, a in opts:if o in ('-h', '--help'):usage()sys.exit(1)elif o in ('-v', '--version'):version()sys.exit(0)elif o in ('-o', '--output'):output(a)sys.exit(0)elif o in ('-m', '--message'):message(a, args[0], args[1])sys.exit(0)else:print 'unhandled option'sys.exit(3)if __name__ == '__main__':main(sys.argv)

OptionParser模块

简介

前面说到getopt,不过getopt太小了,而且从代码的角度看,面向过程的嫌疑很重。相对getopt,OptionParser就显得比较专业级了。OptionParser通过*parser.add_option()添加选项参数,再通过parser.parse_args()*进行解析参数选项。整个过程很面向对象
对于OptionParser还有一个优点在于,我们不需要为OptionParser设置help的选项,help选项已经被内置到模块当中去了。

parser.add_option()参数说明

  1. action: action是parse_args() 方法的参数之一,它指示 optparse 当解析到一个命令行参数时该如何处理。actions 有一组固定的值可供选择,默认是’store ‘,表示将命令行参数值保存在 options 对象里。action的取值有store, store_true, store_false三个;
  2. dest: dest是存储的变量,命令行的执行命令将会保存到dest指定的值当中。比如,下面代码中的-p命令,就会被保存到dest="pdcl"指定的options的pdcl变量中;
  3. default: 用于设置上面dest中保存变量的默认值。比如下面的代码中,我们就将默认值打成了False。那么,我们通过options.pdclp这个变量访问到的值就是False;
  4. type: 用于指定dest中保存变量值的数据类型。默认的数据类型为string;
  5. help: 用于指定当前命令的提示信息。

实战用例

from optparse import OptionParserparser = OptionParser()parser.add_option("-p", "--pdbk",action="store_true",  # 指示 optparse 当解析到一个命令行参数时该如何处理dest="pdcl",  # 存储的变量default=False,help="write pdbk data to oracle db"
)parser.add_option("-z", "--zdbk",action="store_true",dest="zdcl",  # 存储的变量default=False,help="write zdbk data to oracle db"
)parser.add_option("-f", "--file",  # 操作指令action="store",dest="filename",  # 存储的变量type="string",  # 变量类型help="write report to FILE",  # 显示的帮助信息metavar="FILE"  # 存储变量的值
)parser.add_option("-q", "--quiet",action="store_false",dest="verbose",default=True,help="don't print status messages to stdout"
)(options, args) = parser.parse_args()if options.pdcl is True:print 'pdcl is true'
if options.zdcl is True:print 'zdcl is true'
if options.filename is not None:print("filename={0}".format(options.filename))print(args)

通过对上面三种参数解析策略的说明,可以看到这里使用OptionParser模块进行解析是最佳方式。


Ref

  • http://blog.csdn.net/tianzhu123/article/details/7655499
  • http://blog.csdn.net/lwnylslwnyls/article/details/8199454
  • 《Python标准库》

征集

如果你也需要使用ProcessOn这款在线绘图工具,可以使用如下邀请链接进行注册:
https://www.processon.com/i/56205c2ee4b0f6ed10838a6d

Python命令行选项参数解析策略相关推荐

  1. Bash Shell中命令行选项/参数处理

    http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html 0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行 ...

  2. 《Python 黑帽子》学习笔记 - 命令行选项和参数处理 - Day 4

    在学习书中 netcat 代码的时候,发现其命令行选项和参数的处理存在一些小问题,由于调用 getopt 模块的 getopt() 函数时参数设置不当,会引起代码执行时获取不到参数值或引发异常.该问题 ...

  3. 命令行选项解析函数:getopt()

    1.定义: int getopt(int argc, char * const argv[], const char *optstring); 2.描述: getopt是用来解析命令行选项参数的,但是 ...

  4. 命令行选项解析函数(C语言):getopt()和getopt_long()

    上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的.于是乎百度了一番,原来是处理命令行选项参 ...

  5. 命令行选项解析函数(C语言):getopt()和getopt_long()【转】

    (转自:https://www.cnblogs.com/chenliyang/p/6633739.html) 上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_lon ...

  6. python add argument list_python模块介绍- argparse:命令行选项及参数解析

    #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.com qq 37391319 博客: http://blog.csdn.net/oychw #版权所有,转载刊登请来函 ...

  7. getopt:命令行选项、参数处理

    getopt:命令行选项.参数处理 2014-01-11 Posted by yeho 在写shell脚本时经常会用到命令行选项.参数处理方式,如: ./test.sh -f config.conf ...

  8. python 基础命令-详解python常用命令行选项与环境变量

    一.命令行选项 1.解释器选项 python的解释器非常像unix的shell,在我们使用python的过程中,我们可以指定很多的选项. 比如,最常用的选项如下: python script.py 在 ...

  9. 【Python】Python3.7.3 - sys.flag 命令行选项标志结构序列

    文章目录 Python命令行完整选项 sys.flag - Python启动命令行选项标志 Python命令行完整选项 https://blog.csdn.net/qq_43401808/articl ...

最新文章

  1. 计算机教务管理系统ER图,图书管理系统er图 [2].doc
  2. python函数调用外部变量_Python基础
  3. 随想录(用好自己的时间)
  4. Hibernate怎么提升数据库查询的性能 (1)
  5. libevent源码深度剖析二
  6. 程序员数学(29)–投影与视图
  7. MongoDB的一些基本使用
  8. 新浪微博开放平台开发步骤简介(适合新手看)
  9. Nim理论初探——编程之美1.12
  10. 边云协同的优点_探析云边协同的九大应用场景
  11. 跳过微信屏蔽APP扫描以及识别不同系统的手机
  12. 如何升级dart sdk以及choco不是内部或外部命令
  13. asp毕业设计——基于asp+access的商品销售网站设计与实现(毕业论文+程序源码)——商品销售网
  14. 源码下载:74个Android开发开源项目汇总
  15. 使用idea打包war包
  16. 编程规范 写 if 语句不要任性
  17. 冉斌:车路协同是自动驾驶的必经之路
  18. 相机标定中各种标定板介绍以及优缺点分析
  19. ai前世识别_ai人脸识别查找前世今生
  20. 马里兰大学招收机器学习及计算机安全方向博士生 | 2023 秋季

热门文章

  1. 《研磨设计模式》chap22 装饰模式Decorator(2)应用到场景
  2. 《研磨设计模式》chap25 访问者模式Visitor(2)模式应用到场景
  3. [ARM异常]-中断的术语介绍:target,assert,taken,acknowledge
  4. 17-Translation (XLAT) Tables Library
  5. ARP协议SMTP协议MIME
  6. update yum 到指定版本_yum语法及常用命令汇总
  7. 1047 Student List for Course (25 分)【难度: 简单 / 知识点: 模拟】
  8. Acwing第 2 场周赛【完结】
  9. 线程同步之关键代码段
  10. jQuery表格的行编辑