1。前言在日常编写Python脚本的过程中,我们经常需要结合命令行参数传入一些可变参数,使项目更加灵活方便。在本文中,我将列出4种构建Python命令行参数的方法。它们是:内置sys.argv模块内置argparse模块内置getopt模块第三方依赖库click2。sys.argv构建命令行参数最简单最常用的方法是使用内置的“sys.argv”模块,即参数以有序列表的形式传入,所以传递参数的顺序一定要固定用过的。因此,该方法适用于参数数量较少、场景固定的项目。importsysif__name__=='__main__':#获取参数列表#注:sys.argv[0]代表第一个参数,即:脚本名"1_sys.argv.py"#其他参数列表args=sys.argv[1:]#参数个数args_length=len(sys.argv)ifsys.argvelse0print("排除运行主文件参数,其他参数列表为:",args)print("参数总数:",args_length)#使用#python31_sys.argv.pyarg1arg2#排除运行主文件参数,其他参数列表为:[arg1,arg1]#参数总数:3argv”在脚本中,第一个参数代表脚本的主文件名。argparse模块可以轻松编写友好的命令行参数脚本,自动生成帮助手册,当用户向程序传递无效参数时可以抛出明确的错误信息。使用它构建命令行参数,包括3个步骤:构建参数解析对象添加参数添加参数解析参数3-1构建命令行参数解析对象importargparse...#构建命令行参数解析对象parser=argparse.ArgumentParser(description='命令行参数')...3-2添加命令行参数需要指出的是--arg1用于指定参数名,-a1代表dest目标变量值(简写)...#设置3个参数#参数1:arg1,整数,可选参数#参数2:arg2,字符串,可选参数,包括默认值“xag”#参数3:arg3,字符串类型,parser.add_argument('--arg1','-a1',type=int,help='parameter1,non-requiredparameter')parser.add_argument('--arg2','-a2',type=str,help='参数2,非必填参数,包括默认值',default='xag')parser.add_argument('--arg3','-a3',type=str,help='parameter3,requiredparameter',required=True)...3-3解析参数值...#解析参数,得到所有的命令行参数(Namespace),然后转成字典args=vars(parser.parse_args())#获取所有参数print("Allcommandlineparametersare:")forkeyinargs:print(f"命令行参数名:{key},参数值:{args[key]}")...使用时我们可以通过"-h/--help"命令查看帮助文档parameter#查看命令行参数帮助文档python32_argparse.py--help#或python32_argparse.py-h上面添加的3个参数,参数arg1和arg2不需要传值,arg3必须传值,参数arg2指定默认值#参数arg3是必须的,参数arg1和参数arg2不是必须的,参数arg2设置了默认值#传入参数arg3#python32_argparse.py--arg3123#python32_argparse.py-a3123xingag@xingagdeMacBook-Proargs%python32_argparse.py-a3123所有命令行参数为:命令行参数名:arg1,参数值:无命令行参数名:arg2,参数值:xag命令行参数name:arg3,parametervalue:123#传入参数arg1,arg3xingag@xingagdeMacBook-Proargs%python32_argparse.py-a1111-a3123所有命令行参数为:命令行参数名:arg1,参数值:111命令行参数名:arg2,参数值:xag命令行参数名:arg3,参数值:123#传入参数arg1,arg2,arg3xingag@xingagdeMacBook-Proargs%python32_argparse.py-a1111-a2222-a3123所有命令行参数为:命令行参数名:arg1,参数值:111command行参数名:arg2,参数值:222命令行参数名:arg3,参数值:1234getoptgetopt是Python内置的标准模块,可以与sys结合使用。,shortopts,longopts=[])其中args参数列表可以通过sys.argv获取。可以参考上面的shortoptsshortparameterstring来定义short参数。如果参数有值,需要在短参数后加“:”符号传参方式:-n23longoptslongparameterlist定义长参数列表时,如果参数有值,需要加一个短参数后的“=”符号。传递参数的方法:--port8080这里传入数据库连接以参数为例(参数包括ip、用户名、密码、数据库名)说明fromgetoptimportgetoptimportsys#获取参数#sys.argv[1:]:获取除脚本文件名以外的所有命令行参数#opts:保存所有选项及其输入值的元组列表#args:去掉有用的输入后剩下的部分opts,args=getopt(sys.argv[1:],'i:u:p:d:',['ip=','user=','pwd=','db='])#获取参数值#短参数#python34_getopt.py-i127.0.0.1-uroot-p123456-dmysqldb#longparameter#python34_getopt.py--ip127.0.0.1-uroot-p123456-dmysqldbip_pre=[item[1]]foriteminoptsifitem[0]in('-i','--ip')]ip=ip_pre[0]iflen(ip_pre)>0elseNoneprint("parameterip:",ip)user_pre=[item[1]foriteminoptsifitem[0]in('-u','--user')]user=user_pre[0]iflen(user_pre)>0elseNoneprint("参数user:",user)pwd_pre=[item[1]foriteminoptsifitem[0]in('-p','--pwd')]pwd=pwd_pre[0]iflen(pwd_pre)>0elseNoneprint("Parameterpwd:",pwd)db_pre=[item[1]foriteminoptsifitem[0]in('-d','--db')]db=db_pre[0]iflen(db_pre)>0elseNoneprint("parameterdb:",db)在运行脚本的时候,我们可以通过“短参数”或者“长参数”的形式传递#test#shortparameterpython34_getopt.py-i127.0.0.1-uroot-p123456-dmysqldb#长参数python34_getopt.py--ip127.0.0.1--userroot--pwd123456--dbmysqldb5.clickclick作为第三方依赖库,封装了大量命令行工具的方法,可以很方便的实现命令行参数首先我们需要安装依赖库clickimportclick#安装依赖#pip3install-Uclick@click.command()@click.option('--arg1',default='111',help='parameterarg1,默认值为"111"')@click.option('--arg2',type=整数,help='parameterarg2')@click.option('--arg3',type=str,help='parameterarg3')defstart(arg1,arg2,arg3):"""基于参数arg1,参数arg2,参数arg3运行项目:paramarg1::paramarg2::paramarg3::return:"""print("Thevalueofparameterarg1is:",arg1)print("Thevalueofparameterarg2is:",arg2)print("ParameterThevalueofarg3is:",arg3)if__name__=='__main__':start()然后,在main运行函数上通过装饰器配置参数。比如上面定义了三个命令行参数arg1,arg2,arg3,并设置了参数类型和默认值最后运行脚本时,只需要根据参数设置传入相应的值即可#不包含参数xingag@xingagdeMacBook-Proargs%python33_click.py参数arg1值为:111参数arg2值:无参数arg3值:无#包含参数arg1xingag@xingagdeMacBook-Proargs%python33_click.py--arg1test1参数arg1值:test1parameterarg2value:NoneParameterarg3value:None#Containsparameterarg1,arg2#注意:arg2的参数类型为整数,传入的参数必须转为整数,否则会报错xingag@xingagdeMacBook-Proargs%python33_click.py--arg1test1--arg2222参数arg1的值为:test1参数arg2的值为:222参数arg3的值为:None#包含参数arg1、arg2、arg3xingag@xingagdeMacBook-Proargs%python33_click.py--arg1test1--arg2222--arg3test3参数arg1值:test1参数arg2值:222参数arg3值:test36。最后,上面举例说明了Python命令行参数的4种常见实现方式。对于一些简单的自用和不太正式的场景,个人认为可以考虑使用sys.argv模块快速构建命令行参数;而对于一些参数较多且面向用户的正式生产环境,建议使用argparse模块或者点击dependencies来创建命令行参数以上就是本次分享的全部内容,如果你觉得文章还不错,欢迎关注关注公众号:Python编程学习圈,每日干货分享,发送“J”还可领取海量学习资料,涵盖Python电子书、教程、数据库编程、Django、爬虫、云计算等。或者去编程学习网了解更多编程技术知识。
