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
Python解析命令行读取参数 -- argparse模块的更多相关文章
- python 解析命令行选项
问题: 程序如何能够解析命令行选项 解决方案 argparse 模块可被用来解析命令行选项 argparse 模块 argparse 模块是标准库中最大的模块之一,拥有大量的配置选项 dest 参数指 ...
- python解析命令行参数
常常需要解析命令行参数,经常忘记,好烦,总结下来吧. 1.Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: sys.argv 是命令行参数列表 参数个数:len(sys.a ...
- python解析命令行
可以解析这样的命令 ./cron_ctrl jobname1 --stop ;./cron_ctrl jobname1 --start;./cron_ctrl jobname1 --list #!/u ...
- python 解析命令行
python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块.argparse从python 2.7开始被加入到标准库中,所以如果你的python ...
- python 命令行参数——argparse模块的使用
以下内容主要来自:http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/argparse.html argparse ...
- python实现命令行解析的argparse的使用
参考https://docs.python.org/3.6/library/argparse.html argparse模块使编写用户友好的命令行界面变得很容易.程序定义了它需要什么参数,argpar ...
- optparse模块解析命令行参数的说明及优化
一.关于解析命令行参数的方法 关于“解析命令行参数”的方法我们一般都会用到sys.argv跟optparse模块.关于sys.argv,网上有一篇非常优秀的博客已经介绍的很详细了,大家可以去这里参考: ...
- Python的命令行参数(argparse)
参考:https://www.cnblogs.com/lindaxin/p/7975697.html 参考:https://www.cnblogs.com/dengtou/p/8413609.html ...
- boost之program_options库,解析命令行参数、读取配置文件
一.命令行解析 tprogram_options解析命令行参数示例代码: #include <iostream> using namespace std; #include <boo ...
随机推荐
- Keychain group access
Keychain group access Apr 3, 2010 · 3 minute read · Comments keychain Since iPhone OS 3.0 it has bee ...
- 获得触发hover事件的元素id
例: <div class="menu"> <ul> <li> <a id="menu1"></a> ...
- 用python+selenium登录cnblog后新增文章后再次删除该文章
目的:登录cnblog后新增文章后再次删除该文章并验证 代码如下: #coding: utf-8 from selenium import webdriver from time import sle ...
- Meta http-equiv的属性详解 来自wanglehui
Meta http-equiv 语法标签格式:<meta http-equiv="参数" content="参数值"> 1."过期时间&q ...
- CSS3新特性学习
1.一些实用规范:盒子模型,列表模块,超链接方式,语言模块,背景和边框,文字特效,多栏布局: 2:新增的选择器selctor eg: 1) 子元素过滤伪类:div:first-child (自动识别 ...
- 更新系统没有mac dashboard 问题解决
今天更新了mac的系统到EL Capitan,结果出来以后发现平时经常使用的mac dashboard没了,就是这玩意: 找了半天方法,终于知道了这个叫“dashboard” (md之前完全不知道,无 ...
- python 中locals() 和 globals()
1.locals() 和 globals() 是python 的内建函数,他们提供了字典的形式访问局部变量和全局变量的方式. 示例代码: def test(arg): a=1 b=2 data_dic ...
- C#中页面之间跳转方法比较
一直以来,各种跳转方法混用,浑浑噩噩没有仔细去了解过每个跳转方法的区别 1.<a herf="default.asp"></a> 超链接跳转 2.< ...
- null、undefined、false、0相等性比较
之前在看<JavaScript权威指南>的时候看到三个相等性比较的式子: null == undefined ;// ==>true undefined == false;// == ...
- groupspecWidhoutAuthorizations与groupspecWidthAuthorizations的区别
GroupSpecifier是一个用来定义group所有参数的类.首先,将它命名为“myGroup/g1”.然后设置 serverChannel与Stratus进行沟通.最后发布.这样,我们就完成了P ...