python getopt参数参数自动补全_python模块学习---getopt(命令行参数处理)

在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的)。在C语言里,main函数的原型为int main(int argc, char **argv),这里主要指linux平台, argc指的是命令行传入的参数个数(程序的name为第一个参数),而argv则是一个指针数组,每一个元素为指向一个命令行参数的指针。在Python里的命令行参数是存储在sys.argv里,argv是一个列表,第一个元素也为程序名称。

一、sys.argv

sys.argv为python的命令行参数列表,sys.argv[0]保存脚本的文件名,从参数1开始,sys.argv保存的是命令行的其他参数,len(sys.argv)为包括脚本文件名在内的命令行参数的个数。

例如:

import sys

print sys.argv[0] ##脚本名

print sys.argv[1] ## 第一个参数

print sys.argv ###参数数组

print len(sys.argv) ##参数个数

for i in range(1, len(sys.argv)):

print "参数", i, sys.argv[i]

>>>python argv.py hello world

argv.py

['argv.py', 'hello', 'world']

3

参数 1 hello

参数 2 world

二、getopt.getopt函数()

getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。模块

里面的提供了2个函数和一个类,

主要使用getopt函数,先看下函数原型:

def getopt(args, shortopts, longopts = [ ])

我们先看一个实例以方便理解:

try:

opts, args = getopt.getopt(sys.argv[1:], "ho:", ["help", "output="])

except getopt.GetoptError:

# print help information and exit:

for name, value in opts:

print name, value

for item in args:

print item

说明如下:

1. 处理所使用的函数叫getopt() ,因为是直接使用import 导入的getopt 模块,所以要加上限定getopt 才可以。2. 使用sys.argv[1:] 过滤掉第一个参数(它是执行脚本的名字,不应算作参数的一部分)。3. 使用短格式分析串"ho:" 。当一个选项只是表示开关状态时,即后面不带附加参数时,在分析串中写入选项字符。当选项后面是带一个附加参数时,在分析串中写入选项字符同时后面加一个":" 号 。所以"ho:" 就表示"h" 是一个开关选项;"o:" 则表示后面应该带一个参数。4. 使用长格式分析串列表:["help", "output="] 。长格式串也可以有开关状态,即后面不跟"=" 号。如果跟一个等号则表示后面还应有一个参数 。这个长格式表示"help" 是一个开关选项;"output=" 则表示后面应该带一个参数。5. 调用getopt 函数。函数返回两个列表:opts 和args 。opts 为分析出的格式信息。args 为不属于格式信息的剩余的命令行参数。opts 是一个两元组的列表。每个元素为:( 选项串, 附加参数) 。如果没有附加参数则为空串'' 。6. 整个过程使用异常来包含,这样当分析出错时,就可以打印出使用信息来通知用户如何使用这个程序。 如果输入的命令行参数为:

'-h -o file --help --output=out file1 file2'

则输出为:

-h

-o file

--help

--output out

file1

file2

即在分析完成后,opts应该是:

[('-h', ''), ('-o', 'file'), ('--help', ''), ('--output', 'out')]

而args应该为['file1','file2']

再然后就可以根据参数的实际情况来进行处理:

for o, a in opts:

if o in ("-h", "--help"):

usage()

sys.exit()

if o in ("-o", "--output"):

output = a

最后再给出两个实例(参数列表中长选项模式可以不带=号)

第一个

>>>import getopt

>>>args = '-a -b -cfoo -d bar a1 a2'.split()

>>>args

['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']

>>>optlist, args = getopt.getopt(args, 'abc:d:')

>>>optlist

[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]

>>>args

['a1', 'a2']

第二个

>>>s = '--condition=foo --testing --output-file abc.def -x a1 a2'

>>>args = s.split()

>>>args

['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']

>>>optlist, args = getopt.getopt(args, 'x', ['condition=', 'output-file=', 'testing'])

>>>optlist

[('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]

>>>args

['a1', 'a2']

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值