当前位置: 首页 > 后端技术 > Python

Python获取命令行参数的正确方法

时间:2023-03-26 14:05:21 Python

背景介绍最近在写python程序的时候,需要获取python命令行的参数,所以这里介绍一下如何获取命令行参数。1.sys模块在Python中,sys模块是一个非常常用也非常重要的模块。模块中可以通过sys.argv访问所有的命令行参数,它的返回值是一个包含所有命令行参数的列表(list),参数个数:len(sys.argv)脚本名:sys.argv[0]参数一:sys.argv[1]参数二:sys.argv[2]下面通过程序来说明它的用法:#!/usr/bin/python#-*-coding:UTF-8-*-importsysdefmain():"""通过sys模块识别参数demo,http://blog.csdn.net/ouyang_peng/"""print('参数个数:',len(sys.argv),'parameters.')print('参数列表:',str(sys.argv))print('脚本名称:',sys.argv[0])foriinrange(1,len(sys.argv)):print('参数%sis:%s'%(i,sys.argv[i]))if__name__=="__main__":main()Python学习推演QUN:⑧⑤⑤-④Zero⑧-⑧⑨③从零基础到项目实战教程、开发工具和e-Python各个领域的书籍。与大家分享公司目前对python人才的需求和学好python的高效技能,持续更新最新教程!接下来,我们通过命令行运行python脚本1.1。不传递参数,我们执行命令pythontest.py(venv)C:\CodePython\SMTP>pythontest.py参数个数为:1个参数。参数列表:['test.py']脚本名:test.py只识别一个参数,就是脚本名test.py1.2,传递多个参数当我们传递参数时,我们执行命令pythontest。pyouyangpengcsdn(venv)C:\CodePython\SMTP>pythontest.pyouyangpengcsdn参数个数为:3个参数。参数列表:['test.py','ouyangpeng','csdn']脚本名称:test.py参数1为:ouyangpeng参数2为:csdn(venv)C:\CodePython\SMTP>识别的参数有3个,即脚本名test.py,参数1为:ouyangpeng,参数2为:csdn1.3,传递多个参数和命令行选项当我们传递命令行选项和参数时,执行命令pythontest.pyouyangpengcsdn-uusername-ppassword(venv)C:\CodePython\SMTP>pythontest.pyouyangpengcsdn-uusername-ppassword参数个数为:7个参数。参数列表:['test.py','ouyangpeng','csdn','-u','username','-p','password']脚本名:test.py参数1是:ouyangpeng参数2是:csdn参数3为:-u参数4为:username参数5为:-p参数6为:password识别的参数有6个,分别是脚本名test.py,参数1为:ouyangpeng,参数2为:csdn,命令行选项-u和-p都被识别为参数,这是不合理的,所以我们需要引入getopt模块来识别命令行选项。2.getopt模块getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,即sys.argv。命令行选项使程序的参数更加灵活。支持短选项模式(-)和长选项模式(–)。该模块提供了两种方法和一个异常处理程序来解析命令行参数。2.1getopt.getopt方法getopt.getopt方法用于解析命令行参数列表,语法格式如下:getopt.getopt(args,options[,long_options])方法参数说明:args:命令行参数列表被解析。options:以字符串的形式定义。选项后有冒号(:)表示该选项必须有附加参数,没有冒号表示该选项没有附加参数。long_options:以列表的形式定义,long_options后面的等号(=)表示如果设置了该选项,则必须有额外的参数,否则不添加任何参数。方法返回值由两个元素组成:第一个是(选项,值)元组列表。第二个是参数列表,包括那些没有'-'或'-'的。2.1异常getopt.GetoptError当找不到参数列表,或者选项所需的参数为空时,会触发该异常。异常参数是一个字符串,指示错误的原因。属性msg和opt是相关选项的错误消息。2.3例子在了解了sys模块和getopt模块之后,我们可以用命令行编写一个程序,在这个程序中,我们也使用getopt.GetoptError来进行异常处理。代码如下:#!/usr/bin/python#-*-coding:UTF-8-*-importsysimportgetoptdefmain(argv):"""使用getopt模块识别参数demo,http://blog.csdn.net/ouyang_peng/"""username=""password=""try:"""options,args=getopt.getopt(args,shortopts,longopts=[])参数args:一般为sys.argv[1:].过滤掉sys.argv[0],是执行脚本的名字,不算命令行参数.参数shortopts:短格式解析字符串.比如:"hp:i:"h后面没有冒号,表示后面没有参数;p和i后面是冒号,表示后面有参数。参数longopts:长格式解析字符串列表。例如:["help","ip=","port="],如果help后面没有等号,说明后面没有参数;如果ip和port后面跟一个冒号,就表示后面有参数。返回值options是一个元组列表,每个元组的形式为:(optionstring,additionalparameters),如:('-i','192.168.0.1')返回值args是一个列表,of哪些元素是那些不包含“-”或“--”的参数。"""opts,args=getopt.getopt(argv,"hu:p:",["help","username=","password="])exceptgetopt.GetoptError:print('Error:test_arg.py-u-p')print('or:test_arg.py--username=--password=')sys.exit(2)#处理返回值optionsisatupleis元素列表。对于opt,arginopts:如果选择(“-h”,“--help”):print('test_arg.py-u-p')print('or:test_arg.py--username=--password=')sys.exit()elifoptin("-u","--username"):username=argelifoptin("-p","--password"):password=argprint('usernameis:',username)print('passwordis:',password)#打印返回值args列表,即里面的元素是不包含'的元素-'或'--'参数。foriinrange(0,len(args)):print('参数%s是:%s'%(i+1,args[i]))if__name__=="__main__":#sys.argv[1:]是要处理的参数列表,sys.argv[0]是脚本名,所以用sys.argv[1:]过滤掉脚本名。main(sys.argv[1:])2.4运行结果2.4.1、不传参当我们不传参时,执行命令pythontest_arg.py(venv)C:\CodePython\SMTP>pythontest_arg.pyusernamefor:passwordis:(venv)C:\CodePython\SMTP>2.4.2,使用shortformat选项,不传递参数当我们使用shortformat选项,不传递参数时,我们执行命令pythontest_arg。py-h(venv)C:\CodePython\SMTP>pythontest_arg.py-htest_arg.py-u<用户名>-p<密码>或:test_arg.py--username=<用户名>--password=<密码>2.4。3.使用不传参数的长格式选项当我们使用不传参数的长格式选项时,我们执行命令pythontest_arg.py--help(venv)C:\CodePython\SMTP>pythontest_arg.py--helptest_arg.py-u-p或者:test_arg.py--username=--password=(venv)C:\CodePython\SMTP>2.4.4,使用短格式选项传递参数当我们使用短格式选项传递参数时,我们执行命令pythontest_arg.py-uouyangpeng-pcsdn(venv)C:\CodePython\SMTP>pythontest_arg.py-uouyangpeng-pcsdnusername是:ouyangpeng密码是:csdn(venv)C:\CodePython\SMTP>2.4.5。使用长格式选项传递参数当我们使用长格式选项传递参数时,我们执行命令pythontest_arg.py--username=ouyangpeng--password=csdn(venv)C:\CodePython\SMTP>pythontest_arg.py--username=ouyangpeng--password=csdnusername是:ouyangpengpassword是:csdn(venv)C:\代码Python\SMTP>2.4.6。使用长短格式选项传递参数当我们使用长短格式选项传递参数时,我们执行命令pythontest_arg.py-uouyangpeng--password=csdn(venv)C:\CodePython\SMTP>pythontest_arg.py-uouyangpeng--password=csdnusername是:ouyangpeng密码是:csdn(venv)C:\CodePython\SMTP>2.4.7。我们在使用长格式选项和短格式选项时使用格式选项传递一些参数,在传递参数时,我们执行命令pythontest_arg.py-uouyangpeng(venv)C:\CodePython\SMTP>pythontest_arg.py-uouyangpengusernameis:ouyangpengpasswordis:(venv)C:\CodePython\SMTP>2.4.8,passingwrongoptionparameters当我们使用错误的格式选项传递参数时,我们执行命令pythontest_arg.py-e,-e选项不正确(venv)C:\CodePython\SMTP>pythontest_arg.py-eError:test_arg.py-u-por:test_arg.py--username=--password=(venv)C:\CodePython\SMTP>2.4.9,传option参数不传option项参数当我们传递选项参数和不带选项的参数时,我们执行命令pythontest_arg.py-uouyangpeng--password=csdnarg1arg2arg3arg4(venv)C:\CodePython\SMTP>pythontest_arg。py-uouyangpeng--password=csdnarg1arg2arg3arg4username为:ouyangpengpassword为:csdn参数1为:arg1参数2为:arg2参数3为:arg3参数4为:arg4(venv)C:\CodePython\SMTP>Python学习扣QUN:⑧⑤⑤-④零⑧-⑧⑧③从零基础到项目实战教程、开发工具、Python各领域电子书与大家分享目前公司对python人才的需求和学习python的高效技能,并持续更新最新教程!