使用过Linux/Unix的人都会知道,命令行下的很多命令都需要参数,在C语言中添加和解析参数比较繁琐。Python中提供了optparse模块可以非常方便地处理命令行参数。

 

1  命令行参数的样子


我们一般在使用命令行程序的时候,可能会看到大约这样的样子(这是我写的一个简单命令行帮助列表):
Usage: run.py [options] args

Options:
--version show program's version number and exit
-h, --help show this help message and exit
-c CLIENT_NUM, --clients=CLIENT_NUM
number of clents
-t TIME, --time=TIME test time in seconds

在C语言中,我们可能需要使用printf来打印所有的内容,但是请注意上面的内容不是手动打印的,而是optparse自动生成的。下面一点一点来解释这个过程。

 

 

 

2 optparse简单使用过程


当然,首先得导入模块:

from optparse import OptionParser

我们一般使用的是optparse的OptionParser类。

实例化一个OptionParse类,在实例化时可以实现上面命令行帮助信息中的第一行:

usage = "usage: %prog [options] args"
parser = OptionParser(usage,version="%prog 0.1 ")

简单解释一下。我们可以向OptionParser传入参数,上面传入的是usage和version。当然不传入参数也是可以的。常用参数有:

usage:就是展示的第一行内容,默认是“%prog [options]”

version:传入这个参数可以让帮助信息增加--version选项,用来显示定义的软件版本信息。

description:描述这个程序。

add_help_option:这个参数产生-h选项来显示帮助信息,默认是开启的。

prog:可以看到上面使用了%prog,这个就是产生所执行的程序的程序名。(在我的例子里是run.py)

 

然后,我们需要添加必要的选项信息。

parser.add_option("-c", "--clients",dest="client_num",help="number of clents")

使用add_option可以添加选项。具体使用方法见:https://docs.python.org/2/library/optparse.html#optparse.OptionParser.add_option

 

这样我们就向程序添加了选项,有了选项我们就该根据选项进行相应的操作了。

(options, args)=parser.parse_args()

得到option和args后再根据值进行相应的操作。

 

 

非常简单,非常好用。

Python 中使用optparse进行参数解析的更多相关文章

  1. python中的argparse模块(参数解析)

    import argparseparse = argparse.ArgumentParser()parse.add_argument("a", help="params ...

  2. Python中list作为默认参数的陷阱

    在Python中,作为默认参数的一定要是不可变对象,如果是可变对象,就会出现问题,稍不注意,就会调入陷阱,尤其是初学者,比如我(┬_┬). 我们来看一个例子. def add(L=[]): L.app ...

  3. Python常见经典 python中if __name__ == '__main__': 的解析

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  4. python argparse:命令行参数解析详解

    简介 本文介绍的是argparse模块的基本使用方法,尤其详细介绍add_argument内建方法各个参数的使用及其效果. 本文翻译自argparse的官方说明,并加上一些笔者的理解 import a ...

  5. python中定义函数和参数的传递问题

    作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 ...

  6. python中的函数的参数和可变参数

    最近在搞python的过程中需要用到给函数传可变参数..所以去网上找前人的帖子学习了一下 为了尊重原作者,这里附上链接:http://www.cnblogs.com/tqsummer/archive/ ...

  7. python中函数的默认参数陷阱问题

    其实也不能说是陷阱,只是一个不容易注意到的地方,尤其是有其他java/c++类编程语言经验的人员,这里涉及到python的一个特点,所以笔者说是陷阱只是一个噱头而已. def test(item, b ...

  8. python 中_init_函数以及参数self

    1)class类包含: 类的属性:类中所涉及的变量 类的方法:类中函数 2)_init_函数(方法) 1.首先说一下,带有两个下划线开头的函数是声明该属性为私有,不能在类地外部被使用或直接访问. 2. ...

  9. Python中的print、input函数以及Python中交换两个变量解析

    一.Python中的值交换操作 首先明确一点点,Python中的一切都是面向对象的,可以理解为Python的中一切都是对象. 我们知道Java也是面向对象的语言,但是在Java中定义一个值变量如下: ...

随机推荐

  1. scribe、chukwa、kafka、flume日志系统对比 -摘自网络

    1. 背景介绍许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:(1) 构建应用系统和分析系统的桥梁 ...

  2. Running a Remote Desktop on a Windows Azure Linux VM (远程桌面到Windows Azure Linux )-摘自网络(试了,没成功 - -!)

                              A complete click-by-click, step-by-step video of this article is available ...

  3. Juicer javascript 模板引擎

    模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档. js模板引擎包括如下:template官方参考:http://au ...

  4. 【转】Maven实战(九)---模块聚合和继承

    原博文出自于:http://blog.csdn.net/liutengteng130/article/details/47001831   感谢! 类之间有聚合和继承关系,Maven也具备这样的设计原 ...

  5. 发现UC/OS-III源码有一处不明白!会不会是BUG.高手过来看看!

    http://www.amobbs.com/archiver/tid-4939669.html ———————————————————————————————————————————————————— ...

  6. 用C语言实现ipv4地址字符串是否合法

    用程序实现ipv4地址字符串是否合法,主要考察的是C字符串的操作. 搜索了下,网上没有特别好的实现,自己实现了下,见笑于大家,请指正. #include <stdio.h> #includ ...

  7. rsync 无密码传输文件

    最近机器迁移,需要备份文件,但各个机器间不能穿梭,即无法通过scp来传输文件, 在运维的建议下,选用了rsync作为传输的工具. 默认情况Ubuntu安装了rsync服务,但在/etc下没有配置文件, ...

  8. HDU 1455 http://acm.hdu.edu.cn/showproblem.php?pid=1455

    #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #de ...

  9. JavaScript继承方式详解

    原文链接 : http://segmentfault.com/a/1190000002440502 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继 ...

  10. Light oj 1214-Large Division (同余定理)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1214 题意很好懂,同余定理的运用,要是A数被B数整除,那么A%B等于0.而A很大,那我 ...