Python获取命令⾏参数的正确⽅法,案例详解
背景
最近编写⼀个python程序的时候,需要去获取python命令⾏的参数,因此这⾥记录下如何获取命令⾏参数的⽅法。
⼀、sys 模块
在 Python 中,sys 模块是⼀个⾮常常⽤且⼗分重要的模块,通过模块中的 sys.argv 就可以访问到所有的命令⾏参数,它的返回值是包含所有命令⾏参数的列表(list),
参数个数: len(sys.argv)
脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[2]
下⾯我们通过程序来说明它的⽤法:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
def main():
"""
通过sys模块来识别参数demo, blog.csdn/ouyang_peng/
"""
print('参数个数为:', len(sys.argv), '个参数。')
print('参数列表:', str(sys.argv))
print('脚本名为:', sys.argv[0])
for i in range(1, len(sys.argv)):
print('参数 %s 为:%s' % (i, sys.argv[i]))
这⾥还要注意:不管你是为了Python就业还是兴趣爱好,记住:项⽬开发经验永远是核⼼,如果你没有2020最新python⼊门到⾼级实战视频教程,可以去⼩编的Python交流.裙:七⾐⾐九七七巴⽽五(数字的谐⾳)转换下可以到了,⾥⾯很多新py if __name__ == "__main__":
main()
复制代码
下⾯我们通过命令⾏来运⾏该python脚本
关注“ python社区营 ”⼲货分享,免费获取视频资源
1.1、不传递参数
我们执⾏命令python test.py
(venv) C:\Code Python\SMTP>python test.py
参数个数为: 1 个参数。
参数列表: ['test.py']
脚本名为: test.py
复制代码
识别到的参数只有⼀个,就是脚本名 test.py
1.2、传递多个参数
当我们传递参数的时候, 我们执⾏命令python test.py ouyangpeng csdn
(venv) C:\Code Python\SMTP>python test.py ouyangpeng csdn
参数个数为: 3 个参数。
参数列表: ['test.py', 'ouyangpeng', 'csdn']
脚本名为: test.py
参数 1 为:ouyangpeng
参数 2 为:csdn
webapp什么意思(venv) C:\Code Python\SMTP>
复制代码
识别到的参数有3个,分别是脚本名 test.py,参数 1 为:ouyangpeng,参数 2 为:csdn
1.3、传递多个参数和命令⾏选项
当我们传递命令⾏选项和参数的时候,我们执⾏命令python test.py ouyangpeng csdn -u username -p password
(venv) C:\Code Python\SMTP>python test.py ouyangpeng csdn -u username -p password
参数个数为: 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模块来识别命令⾏选项。
⼆、getopt模块
getopt模块是专门处理命令⾏参数的模块,⽤于获取命令⾏选项和参数,也就是sys.argv。命令⾏选项使得程序的参数更加灵活。⽀持短选项模式(-)和长选项模式(–)。
该模块提供了两个⽅法及⼀个异常处理来解析命令⾏参数。
2.pt ⽅法
⽅法参数说明:
args: 要解析的命令⾏参数列表。
options: 以字符串的格式定义,options后的冒号(:)表⽰该选项必须有附加的参数,不带冒号表⽰该选项不附加参数。
long_options: 以列表的格式定义,long_options 后的等号(=)表⽰如果设置该选项,必须有附加的参数,
否则就不附加参数。
该⽅法返回值由两个元素组成: 第⼀个是 (option, value) 元组的列表。第⼆个是参数列表,包含那些没有’-‘或’–’的参数。
2.1 Exception getopt.GetoptError
在没有到参数列表,或选项的需要的参数为空时会触发该异常。
异常的参数是⼀个字符串,表⽰错误的原因。属性 msg 和 opt 为相关选项的错误信息。
2.3 实例
了解了 sys 模块和 getopt 模块,我们就可以来⾃⼰编写⼀个带有命令⾏的程序并且在该程序中,我们还使⽤了 getopt.GetoptError 来进⾏异常处理。代码如下:#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import getopt
def main(argv):
"""
通过 getopt模块来识别参数demo, blog.csdn/ouyang_peng/
"""
username = ""
password = ""
try:
"""
options, args = pt(args, shortopts, longopts=[])
参数args:⼀般是sys.argv[1:]。过滤掉sys.argv[0],它是执⾏脚本的名字,不算做命令⾏参数。
参数shortopts:短格式分析串。例如:"hp:i:",h后⾯没有冒号,表⽰后⾯不带参数;p和i后⾯带有冒号,表⽰后⾯带参数。
参数longopts:长格式分析串列表。例如:["help", "ip=", "port="],help后⾯没有等号,表⽰后⾯不带参数;ip和port后⾯带冒号,表⽰后⾯带参数。
返回值options是以元组为元素的列表,每个元组的形式为:(选项串, 附加参数),如:('-i', '192.168.0.1')
返回值args是个列表,其中的元素是那些不含'-'或'--'的参数。
"""
opts, args = pt(argv, "hu:p:", ["help", "username=", "password="])
实现css3动画效果except getopt.GetoptError:
print('Error: test_arg.py -u <username> -p <password>')
print(' or: test_arg.py --username=<username> --password=<password>')
# 处理返回值options是以元组为元素的列表。
nutch是什么?
for opt, arg in opts:
if opt in ("-h", "--help"):
print('test_arg.py -u <username> -p <password>')
print('or: test_arg.py --username=<username> --password=<password>')
elif opt in ("-u", "--username"):
username = arg
elif opt in ("-p", "--password"):
password = arg
print('username为:', username)
python入门教程视屏print('password为:', password)
# 打印返回值args列表,即其中的元素是那些不含'-'或'--'的参数。
for i in range(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、不传递参数
当我们不传递参数的时候,我们执⾏命令python test_arg.py
(venv) C:\Code Python\SMTP>python test_arg.py
username为:
password为:
(venv) C:\Code Python\SMTP>
复制代码
2.4.2、使⽤短格式选项,不传递参数
当我们使⽤短格式选项,不传递参数的时候,我们执⾏命令python test_arg.py -h
(venv) C:\Code Python\SMTP>python test_arg.py -h
test_arg.py -u <username> -p <password>
or: test_arg.py --username=<username> --password=<password>
复制代码
2.4.3、使⽤长格式选项,不传递参数
当我们使⽤长格式选项,不传递参数的时候,我们执⾏命令python test_arg.py --help
(venv) C:\Code Python\SMTP>python test_arg.py --help
test_arg.py -u <username> -p <password>
or: test_arg.py --username=<username> --password=<password>
(venv) C:\Code Python\SMTP>
复制代码
2.4.4、使⽤短格式选项,传递参数dims
当我们使⽤短格式选项,传递参数的时候,我们执⾏命令python test_arg.py -u ouyangpeng -p csdn
(venv) C:\Code Python\SMTP>python test_arg.py -u ouyangpeng -p csdn
username为: ouyangpeng
password为: csdn
(venv) C:\Code Python\SMTP>
复制代码
2.4.5、使⽤长格式选项,传递参数
当我们使⽤长格式选项,传递参数的时候,我们执⾏命令python test_arg.py --username=ouyangpeng --password=csdn
delphine lalaurie(venv) C:\Code Python\SMTP>python test_arg.py --username=ouyangpeng --password=csdn
username为: ouyangpeng
password为: csdn
(venv) C:\Code Python\SMTP>
复制代码
2.4.6、使⽤长短混合格式选项,传递参数
当我们使⽤长短混合格式选项,传递参数的时候,我们执⾏命令python test_arg.py -u ouyangpeng --password=csdn
(venv) C:\Code Python\SMTP>python test_arg.py -u ouyangpeng --password=csdn
username为: ouyangpeng
password为: csdn
(venv) C:\Code Python\SMTP>
复制代码
2.4.7、使⽤格式选项,传递部分参数
当我们使⽤长短混合格式选项,传递参数的时候,我们执⾏命令python test_arg.py -u ouyangpeng
(venv) C:\Code Python\SMTP>python test_arg.py -u ouyangpeng
username为: ouyangpeng
password为:
(venv) C:\Code Python\SMTP>
复制代码
2.4.8、传递错误的选项参数
当我们使⽤错误的格式选项传递参数的时候,我们执⾏命令python test_arg.py -e,-e选项不正确
(venv) C:\Code Python\SMTP>python test_arg.py -e
Error: test_arg.py -u <username> -p <password>
or: test_arg.py --username=<username> --password=<password>
(venv) C:\Code Python\SMTP>
复制代码
2.4.9、传递选项参数以及不带选项的参数
当我们传递选项参数以及不带选项的参数的时候,我们执⾏命令python test_arg.py -u ouyangpeng --password=csdn arg1 arg2 arg3 arg4
(venv) C:\Code Python\SMTP>python test_arg.py -u ouyangpeng --password=csdn arg1 arg2 arg3 arg4
username为: ouyangpeng
password为: csdn
参数 1 为:arg1
参数 2 为:arg2
参数 3 为:arg3
参数 4 为:arg4
(venv) C:\Code Python\SMTP>
复制代码
最后注意:不管你是为了Python就业还是兴趣爱好,记住:项⽬开发经验永远是核⼼,如果你没有2020最新python⼊门到⾼级实战视频教程,可以去⼩编的Python交流.裙:七⾐⾐九七七巴⽽五(数字的谐⾳)转换下可以到了,⾥⾯很多新python教程项⽬,还可以跟⽼司机交流讨教!
本⽂的⽂字及图⽚来源于⽹络加上⾃⼰的想法,仅供学习、交流使⽤,不具有任何商业⽤途,版权归原作者所有,如有问题请及时以作处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论