Python 中argparse模块的使用

问题提出
最近开发Python程序需要使用命令行参数,于是查阅了以下标准库,发现了argparse。。。

argparse模块简介
argparse模块使得编写用户友好的命令行接口非常容易。程序只需定义好它要求的参数,然后argparse将负责如何从sys.argv中解析出这些参数。argparse模块还会自动生成帮助和使用信息并且当用户赋给程序非法的参数时产生错误信息。 
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。

使用方法

import argparse                     #  首先导入该模块;
parser = argparse.ArgumentParser()  #  然后创建一个解析对象
#  然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项;
parser.add_argument()   

;最后调用parse_args()方法进行解析;解析成功之后即可使用    
args = parser.parse_args()

ArgumentParser 对象介绍

class argparse.ArgumentParser(
                prog=None, 
                usage=None, 
                description=None, 
                epilog=None, 
                parents=[], 
                formatter_class=argparse.
                HelpFormatter, 
                prefix_chars='-',
                fromfile_prefix_chars=None, 
                argument_default=None, 
                conflict_handler='error', 
                add_help=True)


创建一个新的ArgumentParser对象。所有的参数应该以关键字参数传递。下面有对每个参数各自详细的描述

参数    描述
prog    程序的名字(默认:sys.argv[0])
usage    描述程序用法的字符串(默认:从解析器的参数生成)
description    参数帮助信息之前的文本(默认:空)
epilog    参数帮助信息之后的文本(默认:空)
parents    ArgumentParser 对象的一个列表,这些对象的参数应该包括进去
formatter_class    定制化帮助信息的类
prefix_chars    可选参数的前缀字符集(默认:‘-‘)
fromfile_prefix_chars    额外的参数应该读取的文件的前缀字符集(默
argument_default    参数的全局默认值(默认:None)
conflict_handler    解决冲突的可选参数的策略(通常没有必要)
add_help    给解析器添加-h/–help 选项(默认:True)
add_argument函数介绍
ArgumentParser.add_argument(
            name or flags...
            [, action]
            [, nargs]
            [, const]
            [, default]
            [, type]
            [, choices]
            [, required]
            [, help]
            [, metavar]
            [, dest])


add_argument函数介绍

ArgumentParser.add_argument(
            name or flags...
            [, action]
            [, nargs]
            [, const]
            [, default]
            [, type]
            [, choices]
            [, required]
            [, help]
            [, metavar]
            [, dest])

定义应该如何解析一个命令行参数。下面每个参数有它们自己详细的描述,简单地讲它们是:

参数    描述
name or flags    选项字符串的名字或者列表,例如foo 或者-f, –foo
action    在命令行遇到该参数时采取的基本动作类型。
nargs    应该读取的命令行参数数目。
const    某些action和nargs选项要求的常数值。
default    如果命令行中没有出现该参数时的默认值。
type    命令行参数应该被转换成的类型。
choices    参数可允许的值的一个容器。
required - 该命令行选项是否可以省略(只针对可选参数)。    
help    参数的简短描述。
metavar    参数在帮助信息中的名字。
dest    给parse_args()返回的对象要添加的属性名称。

sys模块中的argv输出命令行参数信息

#!/usr/bin/env python
# encoding: utf-8
# echo.py

import sys

if __name__ == "__main__":
    print "您运行程序时输入的运行信息有 %s, 类型 %s"  % (sys.argv, len(sys.argv))
    print "命令行参数的长度", len(sys.argv)

    print "输出每一个参数的信息"
    for i, eachArg in enumerate(sys.argv):
        print "[%d] = %s" % (i, eachArg)

运行结果如下! 

sys.argvè¾åºåæ°ä¿¡æ¯


示例
实现lixnua下echo的功能,显示参数信息

#!/usr/bin/env python
# encoding: utf-8


import sys

import argparse

if __name__ == "__main__":

    parser = argparse.ArgumentParser()

    # 设置dest = "echo"以后
    # 我们的parser可以从参数中读取出名为echo的参数
    # 我们在使用parse_args( )读取参数信息后,可以直接用args.echo读取该参数
    parser.add_argument(dest = "echo", help = "echo the string you use here")
    args = parser.parse_args()

    print "程序运行的所有参数信息"
    print "参数信息", args
    print "参数类型", type(args)

    print "显示字符串echo = ", args.echo   #   直接使用args.echo 即可读取参数的信息


上面的代码,我们的程序可以接收一个名为echo参数,然后我们读取了该参数以后,会在后面打印出该参数的信息,因此该程序的功能其实就是linux中echo命令的功能,只不过我们在之前打印了以下参数的信息而已

echo.pyè¿è¡ç¤ºä¾

注意我们的python程序可以使用两种方式运行,python echo.py 或者./echo.py这里我们的需要知道的时,python是不作为参数的,argv[0]就是指向我们的文件名 / 程序名的。

其中help参数指定的是参数的帮助信息,运行-h 或者--help 我们可以看到运行参数的帮助信息。

-hå--help

实现计算一个数m的n次方

#!/usr/bin/env python
# encoding: utf-8

import sys
import argparse

if __name__ == "__main__":

    parser = argparse.ArgumentParser()

    parser.add_argument(dest = "m", help = "pleaer enter the m...")
    parser.add_argument(dest = "n", help = "pleaer enter the n...")
    args = parser.parse_args()

    print "%d ^ %d = %d" % (args.m,  args.n, args.m ** args.n)


首先运行帮助,我们看看需要输入哪些参数 

æ¥ç帮å©ä¿¡æ¯


我们可以看到运行的示例是square.py m n

于是我们输入python square.py 5 2

è¿è¡æ¥é

我们从命令行中取出的参数默认是str类型的,不能进行数学运算,因此我们需要进行一个转换,可以使用int()函数将字符串转换为整形,但是我们的argparser提供了更好的方法,那就是add_argument函数的type参数

#!/usr/bin/env python
# encoding: utf-8


import sys

import argparse

if __name__ == "__main__":

    parser = argparse.ArgumentParser()

    parser.add_argument(dest = "m", help = "pleaer enter the m...", type = int)
    parser.add_argument(dest = "n", help = "pleaer enter the n...", type = int)
    args = parser.parse_args()

    print "%d ^ %d = %d" % (args.m,  args.n, args.m ** args.n)


现在程序的运行结果如下所示 

å®ç°è®¡ç®ä¸ä¸ªæ°mçn次æ¹


但是这仍然不够,我们见过很多命令行的程序,人家的参数不是这样指定的,是有选项-u -p -s 来指定的。 
请看下面的程序

#!/usr/bin/env python
# encoding: utf-8


import sys

import argparse

if __name__ == "__main__":

    parser = argparse.ArgumentParser()

    parser.add_argument("-m", "--m_number", dest = "m", help = "pleaer enter the m...", type = int)
    parser.add_argument("-n", "--n_number", dest = "n", help = "pleaer enter the n...", type = int)
    args = parser.parse_args()

    print "%d ^ %d = %d" % (args.m,  args.n, args.m ** args.n)

使ç¨-xxæ¥æå®åæ°

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值