在python中使用指定可选参数功能 指定选择项 opts 使用的长短字符
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天, 点击查看活动详情
参数选择项通常有长短两种:
- 长短选择项本身都为字符串
- 短选择项的符号必须单字母,如果需要使用参数,选择项符号后需要使用
:(如'o:'。所有短选择项构成一个字符串传递给getopt。 - 长选择项的符号通常使用单词或短语,如果需要使用参数,选择项符号后需要使用
=(如'output=')。所有长选择项构成一个列表。
try:
opts, args = getopt.getopt(sys.argv[1:], 'ho:', ['help', 'output='])
except getopt.GetoptError, err:
print err
- 传递所有参数
sys.argv[1:]到getopt.getopt。 - 指定短参数符号
ho:,其中-h不使用参数,-o必须指定参数。 - 指定长参数符号
['help', 'output='],其中--help不使用参数,--output必须指定参数。 - 将参数分解完毕后,分别传递给
opts和args。
getopt.GetoptError为抓取的错误信息
选择项 opts 和参数 args
使用 getopt 整理传参后,会得到连个列表: opts 和 args。
- opts 列表中的元素以元组的方式成对出现,分别对应选择项及其值
('opt','arg')。如果 opt 是无参数选择项,则对应的 arg 为空('opt','')。 - 传递多个参数,必须使用列表。
import sys
import optget
def switch(argvs):
try:
opts, args = getopt.getopt(argvs, 'ho:', ['help', 'output='])
print 'opts的值为:',
print opts
print 'args的值为:',
print args
except getopt.GetoptError, err:
print err
if __name__ == '__main__':
argvs = ['-h', '-o', 'filename1', '--help', '--output', 'filename2', 'arg1', 'arg2']
switch(argvs)
# switch(sys.argv[1:])
注意
switch(sys.argv[1:])这里是使用系统传参。sys.argv[0]是程序文件本身,所以过滤。
可以看到,输出结果为:
opts的值为: [('-h', ''), ('-o', 'filename1'), ('--help', ''), ('--output', 'filename2')]
args的值为: ['arg1', 'arg2']
解析 opts 的值
在获取到 opts 之后, 我们可以使用循环获取选项,并判断其是否出现。
import sys
import os
import getopt
def switch(argvs):
try:
opts, args = getopt.getopt(argvs, 'ho:', ['help', 'output='])
for o, a in opts:
# @ o for opt
# @ a for arg
print ' %s -> %s ' % (o, a)
if o in ('-h', '--help'):
print "这里全部都是帮助信息"
if o in ('-o', '--output'):
print "新的输出文件名为 %s" % a
except getopt.GetoptError, err:
print err
if __name__ == '__main__':
argvs = ['-h', '-o', 'filename1', '--help', '--output', 'filename2', 'arg1', 'arg2']
switch(argvs)
-h ->
这里全部都是帮助信息
-o -> filename1
新的输出文件名为 filename1
--help ->
这里全部都是帮助信息
--output -> filename2
新的输出文件名为 filename2
互相吹捧, 共同进步
欢迎和我一起学习进步:可以在掘金私信我