Python命令行选项参数解析策略

概述

在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封装,这样就更加体贴了。

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

优点

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

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


时间: 2024-10-12 11:48:24

Python命令行选项参数解析策略的相关文章

optparse 模块—— 命令行选项的解析器

15.5 optparse 模块--  命令行选项的解析器 注意:从2.7版本后不再使用:optparse模块不推荐使用,python不再更新该模块,后续的发展将推荐使用argparse模块. 支持python2.3及以上版本 optparse模块比旧的getopt模块具有更方便.更灵活.功能更强大的解析命令行选项的库.optparse使用一种更加声明式的命令行解析风格:你创建一个OptionParser实例,填充选项,并解析命令行.optparse允许用户指定选项,使用传统的GNU/POSIX

Python命令行选项參数解析策略

概述 在Python的项目开发过程中,我们有时须要为程序提供一些能够通过命令行进行调用的接口.只是,并非直接使用 command + 当前文件 就ok的,我们须要对其设置可选的各种各样的操作类型.所以,这样的情况下我们就有必要对传入的參数进行解析操作. 以下就此问题提出几种不同的解决策略.希望于你故意. 版权说明 著作权归作者全部. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Coding-Naga 发表日期: 2016年3月18日 链接:http://blog.csdn.net/

【转】Bash Shell中命令行选项/参数处理

原文网址:http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html 0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: 如下一个命令行: ./test.sh -f config.conf -v --prefix=/home 我们称-f为选项,它需要一个参数,即config.conf, -v 也是一个选项,但它不需要参数. --prefix我们称之为一个长选项,即选项本身多于一个字符

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

0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: 如下一个命令行: ./test.sh -f config.conf -v --prefix=/home 我们称-f为选项,它需要一个参数,即config.conf, -v 也是一个选项,但它不需要参数. --prefix我们称之为一个长选项,即选项本身多于一个字符,它也需要一个参数,用等号连接,当然等号不是必须的,/home可以直接写在--prefix后面,即--prefix/home,更多的限制后

命令行选项解析相关知识点

最近读源码的时候碰到命令行解析相关的知识点,比较模糊.摘取出来做个记录 1.最基本的main函数头 main(int argc,char *argv[ ]) 如果只输入程序名xxx,则argc=1,argv[0]指向输入的程序路径及名称./xxx;如果输入xxx para_1(程序名加一个参数),则argc=2,argv[0] 指向输入的程序路径及名称,argv[0]指向参数para_1字符串.以此类推,也就是char  *argv[]:argv 是一个指针数组,其元素个数是argc,存放的是指

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

上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的.于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序.在百度和 man 的帮助下,找到了具体使用方法和解释,二话不说赶紧学习一下,并总结出文档记录一下. 平时在写程序时常常需要对命令行参数进行处理,因为参数少,自己解析就可以搞定:如果命令行个数比较多时,如果按照顺序一个一个定

python argparse模块解析命令行选项简单使用

argparse模块的解析命令行选项简单使用 util.py #!/usr/bin/env python # coding=utf-8 import argparse parser = argparse.ArgumentParser(prog="myprogram ",description="a test of argparse") parser.add_argument("-a",type=int,dest="start"

Python getopt模块处理命令行选项实例教程

分享下Python getopt模块处理命令行选项的一些例子. 在python编程中,getopt模块与shell中的getopt参数模块一样灵活而实用. getopt模块用于抽出命令行选项和参数,也就是sys.argv 命令行选项使得程序的参数更加灵活.支持短选项模式和长选项模式例如 python scriptname.py -f 'hello' --directory-prefix=/home -t --format 'a' 'b' import getopt, sys shortargs

详解Top命令 输出命令行选项及代码

Linux中的top命令显示系统上正在运行的进程.它是系统管理员最重要的工具之一.被广泛用于监视服务器的负载.在本篇中,我们会探索top命令的细节.top命令是一个交互命令.在运行top的时候还可以运行很多命令.我们也会探索这些命令. (译注:不同发行版的top命令在各种细节有不同,如果发现不同时,请读你的帮助手册和命令内的帮助.) 1. Top 命令输出 首先,让我们了解一下输出.top命令会显示系统的很多信息.我们需要理解不同部分输出的意义:默认运行时,top命令会显示如下输出: 前几行水平