Python命令行选项參数解析策略
概述
在Python的项目开发过程中,我们有时须要为程序提供一些能够通过命令行进行调用的接口。只是,并非直接使用 command + 当前文件 就ok的,我们须要对其设置可选的各种各样的操作类型。所以,这样的情况下我们就有必要对传入的參数进行解析操作。
以下就此问题提出几种不同的解决策略。希望于你故意。
版权说明
著作权归作者全部。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Coding-Naga
发表日期: 2016年3月18日
链接:http://blog.csdn.net/lemon_tree12138/article/details/50912898
来源:CSDN
很多其它内容:分类 >> Thinking In Python
文件夹
朴素字符串匹配方案
分析
事实上此方法能够非常直接地表达程序员们在逻辑这条路走了多远。
当然,这并没有包括不论什么的不敬。
这的确是一种方案,甚至能够说是一种算法。由于其直截了当。所以在程序开发初期,本人也是如此乐此不疲。
除了全然的一个一个的命令之外。我们还能够对參数进行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
- http://blog.csdn.net/tianzhu123/article/details/7655499
- http://blog.csdn.net/lwnylslwnyls/article/details/8199454
- 《Python标准库》
Python命令行选项參数解析策略的更多相关文章
- argparse - 命令行选项与参数解析(转)
argparse - 命令行选项与参数解析(译)Mar 30, 2013 原文:argparse – Command line option and argument parsing 译者:young ...
- argparse - 命令行选项与参数解析
argparse模块作为optparse的一个替代被添加到Python2.7.argparse的实现支持一些不易于添加到optparse以及要求向后不兼容API变化的特性,因此以一个新模块添加到标准库 ...
- python argparse模块:命令行选项及参数解析
位置参数:给一个例子: import argparse parser = argparse.ArgumentParser() parser.add_argument("echo") ...
- python argparse模块解析命令行选项简单使用
argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argpars ...
- 9、getopt的用法,被用来解析命令行选项参数
#include <unistd.h> extern char *optarg; //选项的参数指针 extern int optind, //下一次调用ge ...
- getopt:命令行选项、参数处理
在写shell脚本时经常会用到命令行选项.参数处理方式,如: ./test.sh -f config.conf -v --prefix=/home -f 为短选项,它需要一个参数,即config.co ...
- 命令行选项解析函数(C语言):getopt()和getopt_long()
命令行选项解析函数(C语言):getopt()和getopt_long() 上午在看源码项目webbench时,刚开始就被一个似乎挺陌生函数getopt_long()给卡住了,说实话这函数没怎么见过, ...
- pytest 常用命令行选项(二)
本文接上篇继续简介pytest常用的命令行选项. 8.-v(--verbose) 选项 使用-v/--verbose选项,输出的信息会更详细.最明显的区别就是每个文件中的每个测试用例都占一行,测试的名 ...
- 百度URL參数解析
百度URL參数解析 在用Python爬取百度搜索的内容时,发现百度搜索的url非常的长.往往会跟一大段的參数,但事实上非常多參数都是没有必要的,如相同是搜索javakeyword,能够通过 http: ...
随机推荐
- Android ANR 详解
ANR简介 ANR,是“Application Not Responding”的缩写,即“应用程序无响应”.在Android中,ActivityManagerService(简称AMS)和Window ...
- 解决_CRT_SECURE_NO_WARNINGS 警告
问题:我们在程序中使用fopen等CRT函数,就会出现一些警告信息,很烦人,如下: 1>e:/project/htt/ishow/functions.cpp(156) : warning C49 ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(11)——R600指令集
1 低级着色语言tgsi OpenGL程序使用GLSL语言对可编程图形处理器进行编程,GLSL语言(以下高级着色语言就是指GLSL)是语法类似C的高级语言,在GLSL规范中,GLSL语言被先翻译成教低 ...
- mininet命令
官方文档:http://mininet.org/walkthrough/ 翻译的官方文档:https://segmentfault.com/a/1190000000669218 ovs-ofctl相关 ...
- JS打印——第三方控件打印
LODOP 官方地址:http://www.lodop.net/ 一个很好的打印控件,可以是实现纸张设置.横打竖打.打印预览.打印维护多种功能.官网的示例非常详细.能很好支持多种浏览器的打印. 在使用 ...
- 如何使用python查看视频的长度
import subprocess import re def get_length(filename): result = subprocess.Popen(["ffprobe" ...
- 计蒜客 28202. Failing Components-最短路(Dijkstra) (BAPC 2014 Preliminary ACM-ICPC Asia Training League 暑假第一阶段第一场 B)
B. Failing Components 传送门 题意就是单向图,从起点开始找最短路,然后统计一下个数就可以.方向是从b到a,权值为s. 直接最短路跑迪杰斯特拉,一开始用数组版的没过,换了一个队列版 ...
- js timestamp 转换 date 和 将秒数整理为时分秒格式
// 获得的后台json 时间格式转化 例如:1520305366000 转化为XXXX-XX-XX类似这种 function timeStamp2String(time){ var datetim ...
- [LOJ6208]树上询问
题目大意: 有一棵n节点的树,根为1号节点.每个节点有两个权值ki,ti,初始值均为0. 给出三种操作: 1.Add(x,d)操作:将x到根的路径上所有点的ki←ki+d 2.Mul(x,d)操作:将 ...
- 四. Java继承和多态7. Java static关键字
static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...