python获取命令行参数_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, http://blog.csdn.net/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交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!
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
(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.1 getopt.getopt 方法
getopt.getopt 方法用于解析命令行参数列表,语法格式如下:
getopt.getopt(args, options[, long_options])
方法参数说明:
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, 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是以元组为元素的列表,每个元组的形式为:(选项串, 附加参数),如:('-i', '192.168.0.1')
返回值args是个列表,其中的元素是那些不含'-'或'--'的参数。
"""
opts, args = getopt.getopt(argv, "hu:p:", ["help", "username=", "password="])
except getopt.GetoptError:
print('Error: test_arg.py -u -p ')
print(' or: test_arg.py --username= --password=')
sys.exit(2)
# 处理 返回值options是以元组为元素的列表。
for opt, arg in opts:
if opt in ("-h", "--help"):
print('test_arg.py -u -p ')
print('or: test_arg.py --username= --password=')
sys.exit()
elif opt in ("-u", "--username"):
username = arg
elif opt in ("-p", "--password"):
password = arg
print('username为:', username)
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 -p
or: test_arg.py --username= --password=
复制代码
2.4.3、使用长格式选项,不传递参数
当我们使用长格式选项,不传递参数的时候, 我们执行命令 python test_arg.py --help
(venv) C:\Code Python\SMTP>python test_arg.py --help
test_arg.py -u -p
or: test_arg.py --username= --password=
(venv) C:\Code Python\SMTP>
复制代码
2.4.4、使用短格式选项,传递参数
当我们使用短格式选项,传递参数的时候, 我们执行命令 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
(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 -p
or: test_arg.py --username= --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教程项目,还可以跟老司机交流讨教!
本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
python获取命令行参数_Python获取命令行参数的正确方法,案例详解相关推荐
- python队列怎么用_Python队列的定义与使用方法实例详解
这篇文章主要介绍了Python队列的定义与使用方法,结合具体实例形式分析了Python定义及使用队列的具体操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Python队列的定义与使用方法.分享 ...
- python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解
Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...
- python中类的构成_Python中类型关系和继承关系实例详解
本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使 ...
- python数值类型教程_Python数值类型 int、float、complex 详解
Python数值类型 int.float.complex 详解 Python数值类型:int.float.complex 在Python程序中,int.float和complex是三种十分重要的数值类 ...
- python生成表格文件_python 读取excel文件生成sql文件实例详解
python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...
- python io密集 多线程_python多进程和多线程究竟谁更快(详解)
python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...
- python hook pc微信_python实现微信跳一跳辅助工具步骤详解
说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...
- python编写病毒扫描器_python实现集中式的病毒扫描功能详解
本文实例讲述了python实现集中式的病毒扫描功能.分享给大家供大家参考,具体如下: 一 点睛 本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象.描述模式.扫描路 ...
- python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解
python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我 ...
- python实战经典例子_Python基础之列表常见操作经典实例详解
本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...
最新文章
- RGB Color Codes Chart
- CSS-解决苹果点击高亮、安卓select灰色背景(select下拉框在IOS中背景变黑、出现阴影问题)
- 大学期末考试SSH试题四
- 嵌入式linux pcie网卡配置,嵌入式Linux下PCIE数据采集卡驱动开发
- 大事件后台管理系统开发实战(中)
- 信息学奥赛一本通 1028:字符菱形 | OpenJudge NOI 1.1 09
- latex 编辑文档遇到的问题
- Linux工作笔记032---Centos7.3 kill杀掉不用的进程_查看某个进程_某个进程占用的cpu,内存情况
- vShield App设计指南[上]
- python函数定义中参数列表里的参数是_python-函数(def)参数 及参数解构 变量 知识整理...
- java中访问权限控制顺序_Java中的四种访问权限控制 | 学步园
- 这几本书看了之后在工作生活上都是有用的
- 网站建设的一些基本教程操作
- 用ps制作动态图片教程
- linux 卸载dnw命令,《转载》linux下利用dnw烧写文件,dnw安装与配置
- Yuga Labs 收购 CryptoPunks 的始末
- windows2012自动锁定计算机,如何去除 windows server 2012 r2 自动锁定
- vue3中播放视频和m3u8后缀的视频解决办法
- Leetcode 1345 跳跃游戏 IV
- 昨晚,奔奔第一次哭伤心了。。。
热门文章
- JavaCC报错:ERROR: Second call to constructor of static parser
- IDEA :windows下Hadoop报错null\bin\winutils.exe
- 95-140-114-源码-transform-算子project
- 95-140-140-源码-transform-双流操作的实现
- Nginx+Redis 搭建高性能缓存利器
- 结构型设计模式在公司项目中的运用实践
- oracle中以dba_、user_、v$_、all_、session_、index_开头
- css border渐变_css边框渐变
- BZOJ 1922: [Sdoi2010]大陆争霸
- Entity Framework Core 中文入门文档