python通过getopt模块如何获取执行的命令参数详解
前言
python脚本和shell脚本一样可以获取命令行的参数,根据不同的参数,执行不同的逻辑处理。
通常我们可以通过getopt模块获得不同的执行命令和参数。下面话不多说了,来一起看看详细的介绍吧。
方法如下:
下面我通过新建一个test.py的脚本解释下这个模块的的使用
#!/usr/bin/python #-*-coding:utf-8-*- importsys importgetopt if__name__=='__main__': printsys.argv opts,args=getopt.getopt(sys.argv[1:],"ht:q:",["url=",'out']) printopts printargs
执行命令:
./test3.py-t20171010-20171011-q24-h--url=https://www.baidu.com--outfile1file2
执行结果:
['D:/GitReposity/hope_crontab_repo/sla_channel/test3.py','-t','20171010-20171011','-q','24','-h','--url=https://www.baidu.com','--out','file1','file2'] [('-t','20171010-20171011'),('-q','24'),('-h',''),('--url','https://www.baidu.com'),('--out','')] ['file1','file2']
我们查看getopt模块的官方文档
defgetopt(args,shortopts,longopts=[]) Parsescommandlineoptionsandparameterlist.argsisthe argumentlisttobeparsed,withouttheleadingreferencetothe runningprogram.Typically,thismeans"sys.argv[1:]".shortopts isthestringofoptionlettersthatthescriptwantsto recognize,withoptionsthatrequireanargumentfollowedbya colon(i.e.,thesameformatthatUnixgetopt()uses).If specified,longoptsisalistofstringswiththenamesofthe longoptionswhichshouldbesupported.Theleading'--' charactersshouldnotbeincludedintheoptionname.Options whichrequireanargumentshouldbefollowedbyanequalsign ('='). Thereturnvalueconsistsoftwoelements:thefirstisalistof (option,value)pairs;thesecondisthelistofprogramarguments leftaftertheoptionlistwasstripped(thisisatrailingslice ofthefirstargument).Eachoption-and-valuepairreturnedhas theoptionasitsfirstelement,prefixedwithahyphen(e.g., '-x'),andtheoptionargumentasitssecondelement,oranempty stringiftheoptionhasnoargument.Theoptionsoccurinthe listinthesameorderinwhichtheywerefound,thusallowing multipleoccurrences.Longandshortoptionsmaybemixed.
可以发现getopt方法需要三个参数。
第一个参数是args是将要解析的命令行参数我们可以通过sys.argv获取执行的相关参数
['D:/GitReposity/hope_crontab_repo/sla_channel/test3.py','-t','20171010-20171011','-q','24','-h','--url=https://www.baidu.com']
可以看出参数列表的第一个值是脚本执行的完全路径名,剩余参数是以空格分割的命令行参数。为了获得有效参数,通常args参数的值取sys.argv[1:]。
第二个参数是shortopts是短命令操作符,他的参数要包含命令行中以-符号开头的参数,像上面的例子中qht都以为-开头,所以qht是该脚本的短命令,短命令又是如何匹配参数的呢?可以看到例子中shotopts为"ht:q:",这里用命令后面跟着:来申明这个命令是否需要参数,这里h不需要参数,t和q需要参数,而命令行中紧跟着t和q的参数即为他们的命令参数,即t的命令参数为20171010-20171011,q的命令参数为24。
第三个参数是longopts,改参数是个数组,表示长命令操作符集合。这个集合要包含命令行中以--符号开头的参数,url和out都是长命令,当长命令后面以=结尾是表示他需要一个参数,比如"url=",他匹配命令行中的下一个参数https://www.baidu.com.
该方法返回两个数组元素。第一个返回值,是通过shortopts和longopts匹配的命令行和其参数的元祖。该例子的返回值为:
[('-t','20171010-20171011'),('-q','24'),('-h',''),('--url','https://www.baidu.com'),('--out','')] ['file1','file2']
第二个返回值是命令行中未被匹配到的参数,该例子的返回值为:
['file1','file2']
通过返回值我们就可以在自己的代码中,根据不同命令去设计不同的逻辑处理,相当丰富了脚本的可用性。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。