python 命令行参数解析、并设置默认值_Python命令行选项参数解析策略

概述

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

版权说明

目录

朴素字符串匹配方案

分析

其实此方法可以很直接地表达程序猿们在逻辑这条路走了多远。当然,这并没有包含任何的不敬。

这的确是一种方案,甚至可以说是一种算法。因为其直截了当,所以在程序开发初期,本人也是如此乐此不疲。除了完全的一个一个的命令之外,我们还可以对参数进行json封装,这样就更加体贴了。

关于,这一点我想也不用多说什么的了。还是留一些时间给后面的两种解决方案比较妥当。不过还是可以说说此方案的优点与缺点。

优点

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

缺点

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

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' % args

def 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()参数说明

action: action是parse_args() 方法的参数之一,它指示 optparse 当解析到一个命令行参数时该如何处理。actions 有一组固定的值可供选择,默认是’store ‘,表示将命令行参数值保存在 options 对象里。action的取值有store, store_true, store_false三个;

dest: dest是存储的变量,命令行的执行命令将会保存到dest指定的值当中。比如,下面代码中的-p命令,就会被保存到dest=”pdcl”指定的options的pdcl变量中;

default: 用于设置上面dest中保存变量的默认值。比如下面的代码中,我们就将默认值打成了False。那么,我们通过options.pdclp这个变量访问到的值就是False;

type: 用于指定dest中保存变量值的数据类型。默认的数据类型为string;

help: 用于指定当前命令的提示信息。

实战用例

from optparse import OptionParser

parser = 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值