Python命令行选项參数解析策略
2017-07-28 21:09
453 查看
概述
在Python的项目开发过程中,我们有时须要为程序提供一些能够通过命令行进行调用的接口。只是,并非直接使用 command + 当前文件 就ok的,我们须要对其设置可选的各种各样的操作类型。所以,这样的情况下我们就有必要对传入的參数进行解析操作。以下就此问题提出几种不同的解决策略。希望于你故意。
版权说明
著作权归作者全部。商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Coding-Naga
发表日期: 2016年3月18日
链接:http://blog.csdn.net/lemon_tree12138/article/details/50912898
来源:CSDN
很多其它内容:分类 >> Thinking In Python
文件夹
概述版权说明
文件夹
朴素字符串匹配方案
分析
长处
缺点
getopt模块
简单介绍
实战用例
OptionParser模块
简单介绍
parseradd_option參数说明
实战用例
Ref
朴素字符串匹配方案
分析
事实上此方法能够非常直接地表达程序员们在逻辑这条路走了多远。当然,这并没有包括不论什么的不敬。
这的确是一种方案,甚至能够说是一种算法。由于其直截了当。所以在程序开发初期,本人也是如此乐此不疲。
除了全然的一个一个的命令之外。我们还能够对參数进行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/7655499http://blog.csdn.net/lwnylslwnyls/article/details/8199454
《Python标准库》
相关文章推荐
- Python命令行选项参数解析策略
- Python命令行选项参数解析策略
- python argparse模块解析命令行选项简单使用
- python 命令行參数解析
- Python编写带选项的命令行程序
- argparse——python命令行解析
- 命令行程序选项解析函数—getopt_long
- Learning Python(6)--Python的命令行解析argparse模块
- 一个“牛逼”的 Python 命令行解析库
- 转:python命令行解析工具Argparse
- python类库31[命令行解析]
- Python解析命令行读取参数--argparse模块使用方法
- Python 命令行解析工具 Argparse介绍
- 详解Python命令行解析工具Argparse
- python 命令行解析
- argparse--解析命令行选项、用法以及说明
- python_getopt解析命令行输入参数的使用
- python命令行解析工具Argparse
- python命令行选项和参数分割
- Python--命令行解析库argparse的使用