关闭

python Argparse模块的使用

标签: python
6995人阅读 评论(2) 收藏 举报
分类:

参考:

Argparse Tutorial:https://docs.python.org/2.7/howto/argparse.html#id1

argparse - Parser for command-line options, arguments and sub-commands:https://docs.python.org/2.7/library/argparse.html?highlight=argparse#module-argparse


#################################################


模块argparse是Python标准库中推荐的命令行解析模块

有两个其他模块也能完成相同的功能,即getopt和optparse模块。其中,argparse是基于optparse模块实现的,因此在用法上也非常相似。


##################################################

基础


最简单的一个例子,编写prog.py:

import argparse

parser = argparse.ArgumentParser()
parser.parse_args()



运行上述脚本并且没有添加任何参数时,输出无结果

添加--help参数时,argparse模块会自动输出帮助信息,这是它的优势(参数--help也可以简化为-h,这两个参数是不需要我们编辑的)

当指定其他参数时报错,即便如此,也可以得到一个有用的用法信息


###############################################################

位置参数

指定位置参数后,程序必须输入该参数值才能运行


修改prog.py脚本:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print args.echo


增加add_argument()方法,在这个方法中,我们指定程序将要去接受的命令行选项,在这里我们命名为echo(只是一个名字,可以随意更改)

此时,调用程序需要输入一个参数

方法parse_args()实际上会返回一些选项指定的值,上述例子中,选项为echo

在argparse模块中,当你指定位置参数名为echo时,此时想要提取该参数值,必须指定为args.echo


可以在add_argument()方法中添加help选项以便该位置参数更加明了

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print args.echo


一般我们要求输出位置参数是为了以后程序的运算。由于argparse将输入的参数均视为strings类型,而有时我们需要的是int类型,比如

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number")
args = parser.parse_args()
print args.square**2


当我们需要输入一个int类型值时,由于默认输入参数值均为str类型,所以出错。此时有两种方法

第一种,在计算过程中转换str为int类型:

print int(args.square)**2

第二种,可以在add_argument()方法中用关键字type指定输入类型,即可解决:

parser.add_argument("square", help="display a square of a given number", help=int)

推荐使用第二种


######################################################################33

可选参数


一个简单的例子

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
	print "verbosity turned on"


设置可选参数后,程序可以不输入该参数值运行

如果程序运行时要赋值可选参数,必须先指定该可选参数。例如

python prog.py --verbosity hel

如果程序运行时没有赋值给可选参数verbosity,则相应的args.verbosity也会为空(None)

如果程序使用了可选参数,后面必须跟参数值,不然会报错


默认可选参数会被赋值为str,而在实际情况中,很多时候,可选参数是作为一个标识而不是一个确切的值,仅需要确定是true或false即可,可以指定关键字action,赋值为"store_true"

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity", action="store_true")
args = parser.parse_args()
if args.verbosity:
	print "verbosity turned on"


这样--verbosity就可以像--help类似,只需输入参数即可


############################################################################3

快捷选项(短选项)

类似命令行用法,长选项总会有相应的短选项,只需在相应的add_argument()方法中加上即可:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", help="increase verbosity", action="store_true")
args = parser.parse_args()
if args.verbose:
	print "verbosity turned on"



####################################################################

结合使用位置参数(positional arguments)和可选参数(optional arguments)


import argparse

parser = argparse.ArgumentParser()
parser.add_argument("square", type=int, help="display a square of a given number")
parser.add_argument("-v", "--verbose", action="store_true", help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbose:
	print "the square of {} equals {}".format(args.square, answer)
else:
	print answer



注意,参数顺序没有关系


import argparse

parser = argparse.ArgumentParser()
parser.add_argument("square", type=int, help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
	print "the square of {} equals {}".format(args.square, answer)
elif args.verbosity == 1:
	print "{}^2 == {}".format(args.square, answer)
else:
	print answer



上述程序中还可改进以下,可以指定可选参数的取值范围,用关键字choices

parser.add_argument("-v", "--verbosity", type=int, choices=[0,1,2], help="increase output verbosity")


此处还有另一种方法来执行程序,这也很普遍,并且这种方式匹配CPython可执行程序

parser.add_argument("-v", "--verbosity", action="count", help="increase output verbosity")


还可以指定关键字default来指定选项默认的值

parser.add_argument("-v", "--verbosity", default=2, action="count", help="increase output verbosity")


############################################################################

进阶用法


可以使用多个位置参数:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
parser.add_argument("-v", "--verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
if args.verbosity >= 2:
	print "{} to the power {} equals {}".format(args.x, args.y, answer)
elif args.verbosity >= 1:
	print "{}^{} == {}".format(args.x, args.y, answer)
else:
	print answer



可以使用可选参数来显示不同级别的信息:

parser = argparse.ArgumentParser()
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
parser.add_argument("-v", "--verbosity", action="count", default=0)
args = parser.parse_args()
answer = args.x**args.y
if args.verbosity >= 2:
	print "Running '{}'".format(__file__)
if args.verbosity >= 1:
	print "{}^{} == ".format(args.x, args.y)
print answer


##################################################

以下是DIGITS中的一段源码:

if __name__ == '__main__':
    script_start_time = time.time()

    parser = argparse.ArgumentParser(description='Classification example - DIGITS')

    ### Positional arguments

    parser.add_argument('caffemodel',   help='Path to a .caffemodel')
    parser.add_argument('deploy_file',  help='Path to the deploy file')
    parser.add_argument('image',        help='Path to an image')

    ### Optional arguments

    parser.add_argument('-m', '--mean',
            help='Path to a mean file (*.npy)')
    parser.add_argument('-l', '--labels',
            help='Path to a labels file')
    parser.add_argument('--nogpu',
            action='store_true',
            help="Don't use the GPU")

    args = vars(parser.parse_args())

    image_files = [args['image']]

    classify(args['caffemodel'], args['deploy_file'], image_files,
            args['mean'], args['labels'], not args['nogpu'])

    print 'Script took %s seconds.' % (time.time() - script_start_time,)


0
0
查看评论

python中argparse

在很多编程语言中,运行程序可以直接使用function(a,b,……)运行程序,但是在python中就无法实现,那么我们如何在命令行中传递参数呢?在python的中,有一个argparse包,能够实现。      当遇到需要参数的情况时,有以下三种处理方法: ...
  • ali197294332
  • ali197294332
  • 2016-04-18 20:50
  • 4842

python命令行解析模块argparse

英文原文地址: https://docs.python.org/3.4/library/argparse.html#module-argparse https://docs.python.org/3.4/howto/argparse.html#id1 python标准库模块argparse用于...
  • guoyajie1990
  • guoyajie1990
  • 2017-08-06 09:12
  • 691

python学习 之 argparse

argparse是一个命令解析器,如下我们解析下tensorflow中的一个例子,希望大家共勉之。 import argparse import sys if __name__ == "__main__": parser = argparse.ArgumentParser()...
  • a1964543590
  • a1964543590
  • 2017-04-09 08:47
  • 1806

python argparse的作用

argparse - 命令行选项与参数解析(译) 2013-03-30 Sat By youngsterxyf 原文:argparse – Command line option and argument parsing译者:youngsterxyfargparse模块作为optparse的一...
  • hzau_yang
  • hzau_yang
  • 2016-12-19 16:22
  • 569

python命令行参数处理:argparse、optparse和getopt

待续...
  • first_wolf
  • first_wolf
  • 2014-08-01 11:43
  • 3072

python Argparse 模块入门

argparse是python标准库里面的用来处理命令行参数的库位置参数和选项参数先了解位置参数和选项参数的概念,以linux中’ls’命令为例[root@openstack_1 /]# ls bin boot dev etc home lib lost+found media mn...
  • tuxl_c_s_d_n
  • tuxl_c_s_d_n
  • 2015-04-06 17:10
  • 1679

python argparse 简介

本教程是对于Python标准库中推荐使用的命令行解析模块argparse的简单介绍。 PS:还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的optparse。因为argparse是基于optparse,所以用法很类似。 概念 让我们先用ls来展示这...
  • mydear_11000
  • mydear_11000
  • 2016-10-10 19:30
  • 668

编写带命令行参数的 Python 程序

我们在安装一些 Python 程序的时候经常会输入这样的命令行语句 python setup.py install,从这条语句中我们可以看到 setup.py 是一个 Python 程序,但是其中的 install 又是什么呢?其实它就是这个 Python 程序的命令行参数。在这篇文章中我会和大家探...
  • luoyhang003
  • luoyhang003
  • 2016-02-27 15:29
  • 10383

Python中optparse(2.7版本后将被移除)转到argparse

一、使用流程1、 导入模块from optparse import OptionParser2、创建对象parser = OptionParser()3、往对象中添加options:定义命令行参数,每个命令行参数就是由参数名字符串和参数属性组成的,其中包含长参数名和短参数名parser.add_op...
  • AnthongDai
  • AnthongDai
  • 2017-12-20 20:27
  • 53

python入门:sys.argv与optparse与argparse与getopt的区别

optparse与argparse的区别:Deprecated since version 3.2: The optparse module is deprecated and will not be developed further; development will continue with...
  • foryouslgme
  • foryouslgme
  • 2016-10-14 11:11
  • 1758
    个人资料
    • 访问:836172次
    • 积分:10186
    • 等级:
    • 排名:第2018名
    • 原创:311篇
    • 转载:40篇
    • 译文:10篇
    • 评论:92条
    博客专栏
    文章分类
    最新评论