Python解析命令行读取参数 — argparse模块

Python解析命令行读取参数 — argparse模块

大家好,又见面了,我是全栈君。

在多个文件或者不同语言协同的项目中,python脚本经常需要从命令行直接读取参数。万能的python就自带了argprase包使得这一工作变得简单而规范。PS:optparse包是类似的功能,只不过写起来更麻烦一些。

如果脚本很简单或临时使用,没有多个复杂的参数选项,可以直接利用sys.argv将脚本后的参数依次读取(读进来的默认是字符串格式)。比如如下名为test.py的脚本:

import sys print "Input argument is %s" %(sys.argv)

在shell脚本中运行python test.py help可以得到Input argument is help的结果。
1) 一般形式
但是大多数情况下,脚本很可能需要多个参数,而且每次参数的类型用处各不相同,那么这个时候在参数前添加标签表明参数的类型和用途便十分有用,而利用argparse模块可以很方便得实现这一目的。
同样用名为test.py的脚本举个栗子:

import argparse parser = argparse.ArgumentParser(description="your script description") # description参数可以用于插入描述脚本用途的信息,可以为空 parser.add_argument('--verbose', '-v', action='store_true', help='verbose mode') # 添加--verbose标签,标签别名可以为-v,这里action的意思是当读取的参数中出现--verbose/-v的时候 # 参数字典的verbose建对应的值为True,而help参数用于描述--verbose参数的用途或意义。 args = parser.parse_args() # 将变量以标签-值的字典形式存入args字典 if args.verbose: print "Verbose mode on!" else: print "Verbose mode off!"

运行python test.py后面跟了–verbose/-v的时候会输出前者,如果什么都没有会输出后者。如果输入了–verbose/-v以外的参数则会报错:unrecognized arguments
稍微提一下,action参数表示值赋予键的方式,这里用到的是bool类型;如果是’count’表示将–verbose标签出现的次数作为verbose的值;’append’表示将每次出现的该便签后的值都存入同一个数组再赋值。(嘛,一般后面两种用的比较少就不多说了)
PS:–help标签在使用argparse模块时会自动创建,因此一般情况不需要我们主动定义帮助信息。

$ python test.py --help
usage: test.py [-h] [--verbose]

your script description

optional arguments:
    -h, --help        show this help message and exit
    --verbose, -v     verbose mode  

2) 必需参数
这种模式用于确保某些必需的参数有输入。
parser.add_argument('--verbose', required=True, type=int)
required标签就是说–verbose参数是必需的,并且类型为int,输入别的类型会报错。

3)位置参数(positional arguments)
位置参数与sys.argv调用比较像,参数没有显式的–xxx或者-xxx标签,因此调用属性也与sys.argv相同。

parser.add_argument('filename') # 输入的第一个参数赋予名为filename的键 args = parser.parse_args() print "Read in %s" %(args.filename)

输入python test.py test.txt则会输出Read in test.txt
此外,可以用nargs参数来限定输入的位置参数的个数,默认为1。当然nargs参数也可用于普通带标签的参数。
parser.add_argument('num', nargs=2, type=int)表示脚本可以读入两个整数赋予num键(此时的值为2个整数的数组)。nargs还可以’*’用来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;‘+’表示读取至少1个该位置参数。’?’表示该位置参数要么没有,要么就只要一个。(PS:跟正则表达式的符号用途一致。)比如用:

parser.add_argument('filename') parser.add_argument('num', nargs='*)

就可以运行python test.py text.txt 1 2
由于没有标签,所以用位置参数的时候需要比较小心。

4)输入类型
之前已经提到了用type参数就可以指定输入的参数类型。而这个type类型还可以表示文件操作的类型从而直接进行文件的读写操作。

parser.add_argument('file', type=argparser.FileType('r')) # 读取文件 args = parser.parse_args() for line in args.file: print line.strip()

5)参数默认值
一般情况下会设置一些默认参数从而不需要每次输入某些不需要变动的参数,利用default参数即可实现。

parser.add_argument('filename', default='text.txt')

这个时候至直接运行python text.py就能得到Read in text.txt而不需要输入文件名了。

6)候选参数选择
表示该参数能接受的值只能来自某几个值候选值中,除此以外会报错,用choices参数即可。比如:

parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])

参考:https://mkaz.tech/python-argparse-cookbook.html
https://docs.python.org/2/howto/argparse.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108703.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • YUI Compressor插件压缩后war中的js/css文件未压缩的解决方法(被maven打包顶替了)

    YUI Compressor插件压缩后war中的js/css文件未压缩的解决方法(被maven打包顶替了)YUICompressorMaven插件可以压缩/合并js或css文件,经常用在Maven项目中,但最近发现在wabapp中执行了mvninstall命令进行发布之后,终端中显示插件已经执行了压缩的动作,但在输出文件夹或者war包中js和css文件都还是未压缩的原始文件。这样执行mvninstall命令之后发现虽然执行了压缩任务,但是在目标目录下和war包中的js和css…

  • StartActivityForResult的用法「建议收藏」

    StartActivityForResult的用法「建议收藏」当一个OneActivity跳转到TwoActivity时,TwoActivity关闭时要把数据传回到OneActivity,这个时候就得用到StartActivityForResult。使用这个方法特别要注意的是:一个Activity中可能包含多个按钮,并调用多个startActivityForResult方法来打开不同的Activity处理业务,当这些新Activity关闭后,系统会调用前…

  • 上传文件块client实现

    上传文件块client实现

  • ajax发送异步请求四个步骤,AJAX的异步请求的四个步骤[通俗易懂]

    ajax发送异步请求四个步骤,AJAX的异步请求的四个步骤[通俗易懂]ajax异步请求详解ajaxajax定义:异步的JavaScript和xml浏览器一、建立对象,XMLHttpRrquest的出现才有了异步处理。服务器XMLHttpRrquest是AJAX的基础异步全部的现代浏览器均支持XMLHttpRrquest对象(IE5和IE6使用ActiveObject)asyncXMLHttpRrquest用于在后台与服务器交换数据。这意味着能够在不从新加载整个网页的…

  • K8S-1.15.1版本部署

    K8S-1.15.1版本部署

  • VMware 搭建私有云

    VMware 搭建私有云我们的目的是在VMwareworkstation上安装Centos7系统,并配置用远程桌面访问虚拟机。在虚拟机上安装Centos7首先按照老师给出的博客(VirtualBox安装Centos7笔记)进行安装。博主使用的是virtualBox,但VMware的操作也是基本相同,并且不需要单独设置虚拟机远程访问模式。安装完后我遇到了问题ifconfig:…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号