python - 解析命令行读取参数 -- argparse模块

 

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

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

sys.argv[]的用法简明解释

  sys.argv[]说白了就是一个从程序外部获取参数的桥梁,因为从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。

比如如下名为test.py的脚本:

import sys
print "Input argument is %s" %(sys.argv)
print "Input argument is %s" %(sys.argv[0])
print "Input argument is %s" %(sys.argv[1])

在shell脚本中运行python test.py help可以得到以下的结果。

[root@skyeye mnt]# python test.py help

Input argument is ['test.py', 'help']
Input argument is test.py
Input argument is help


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

# coding=utf-8
import argparse

# 创建 ArgumentParser() 对象
parser = argparse.ArgumentParser(description="your script description")            # description参数可以用于插入描述脚本用途的信息,可以为空

# 调用 add_argument() 方法添加参数
parser.add_argument('-p','--port', type=int, help=“input a int num!”, default=80)
                                                               
# 使用 parse_args() 解析添加的参数
args = parser.parse_args()                                                         # 将变量以标签-值的字典形式存入args字典

print args.port

运行python test.py

[root@skyeye mnt]# python l.py 
80
[root@skyeye mnt]# python l.py -p 10
10
[root@skyeye mnt]# 

 

 

 

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

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

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

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

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

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

parser.add_argument('filename', choices=['test1.txt', 'text2.txt'])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值