python的getopt库使用详解

运行程序时有时候要传入一些参数,如ls -arm -rf *等。
我们在写程序时该怎么正确获取这些程序运行时传递的参数嘞?在python中,是使用getopt标准库。

getopt标准库官网链接

getopt库通常和sys.argv配合使用——sys.argv获取全部参数信息getopt负责整理

getopt库只有2个方法:
getopt.getopt
getopt.gnu_getopt
和1个异常
getopt.GetoptError

其实还有一个异常getopt.error,但是它只是getopt.GetoptError的同名属性,只是用作向后兼容罢了。可参照getopt官网的getopt.error异常

sys.argv可以获得一个列表,它以空格为界,将命令行的所有指令拆分为列表的各个元素。

举个例子
python test.py -h -v --path=/home
sys.argv输出就是
[‘test.py’, ‘-h’, ‘-v’, ‘–path=/home’]
注意第一个列表元素为程序名,后面才是各个参数
另外需要明确的是,我们的参数通常有2种
①短参数:如-h -v -p=/home
②长参数:如--help,--version,--path=/home
参数可有值可无值。

我们用getopt.getopt抛砖引玉,getopt.gnu_getopt也差不多其实。
getopt.getopt的用法为getopt.getopt(args, shortopts, longopts=[])
其中argslongopts[]的数据类型都是列表,shortopts的数据类型是字符串。
args是程序的所有参数,如上面例子中的-h -v --path=/home,所以通常用sys.argv[1:]
shortopts是所有短选项直接连接成的字符串,如-h-v
longopts是所有长选项组成的列表,如['help', 'version', 'path=']

返回值有两个,第1个是所有选项-值组成的元组形成的列表,第二个是其他所有东西。

多说无益,看个例子吧

import getopt
import sys

opts, args = getopt.getopt(sys.argv[1:], '-h-v-p:', ['help', 'version', 'path='])
print("opts=", opts)
print("args=", args)
print(sys.argv)
for opt_name,opt_value in opts:
    if opt_name in ('-h', '--help'):
        print("### Help info")
    if opt_name in ('-v', '--version'):
        print("### Version is 0.1 ")
    if opt_name in ('-p', '--path'):
        path = opt_value
        print("### Path is", path)

注意短参数后面跟:,长参数后面跟=,是可以传入值的意思

在终端中执行
python test.py -h

opts= [('-h', '')]
args= []
['test.py', '-h']
### Help info

python test.py --help

opts= [('--help', '')]
args= []
['test.py', '--help']
### Help info

python test.py -v

opts= [('-v', '')]
args= []
['test.py', '-v']
### Version is 0.1

python test.py --version

opts= [('--version', '')]
args= []
['test.py', '--version']
### Version is 0.1

python test.py -p /home

opts= [('-p', '/home')]
args= []
['test.py', '-p', '/home']
### Path is /home

python test.py --path=/home

opts= [('--path', '/home')]
args= []
['test.py', '--path=/home']
### Path is /home

python test.py --path=/home -h -v

opts= [('--path', '/home'), ('-h', ''), ('-v', '')]
args= []
['test.py', '--path=/home', '-h', '-v']
### Path is /home
### Help info
### Version is 0.1

python test.py --path=/home -h -v foo bar=1

opts= [('--path', '/home'), ('-h', ''), ('-v', '')]
args= ['foo', 'bar=1']
['test.py', '--path=/home', '-h', '-v', 'foo', 'bar=1']
### Path is /home
### Help info
### Version is 0.1

参考文献:https://www.jianshu.com/p/a877e5b46b2d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值