最近编写一个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获取命令行参数的正确方法,案例详解相关推荐

  1. python队列怎么用_Python队列的定义与使用方法实例详解

    这篇文章主要介绍了Python队列的定义与使用方法,结合具体实例形式分析了Python定义及使用队列的具体操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了Python队列的定义与使用方法.分享 ...

  2. python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解

    Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...

  3. python中类的构成_Python中类型关系和继承关系实例详解

    本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使 ...

  4. python数值类型教程_Python数值类型 int、float、complex 详解

    Python数值类型 int.float.complex 详解 Python数值类型:int.float.complex 在Python程序中,int.float和complex是三种十分重要的数值类 ...

  5. python生成表格文件_python 读取excel文件生成sql文件实例详解

    python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...

  6. python io密集 多线程_python多进程和多线程究竟谁更快(详解)

    python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为 ...

  7. python hook pc微信_python实现微信跳一跳辅助工具步骤详解

    说明 1.windows上安装安卓模拟器,安卓版本5.1以上 2.模拟器里下载安装最新的微信6.6.1 3.最好使用python2.7,python3的pyhook包有bug,解决比较麻烦 步骤 1. ...

  8. python编写病毒扫描器_python实现集中式的病毒扫描功能详解

    本文实例讲述了python实现集中式的病毒扫描功能.分享给大家供大家参考,具体如下: 一 点睛 本次实践实现了一个集中式的病毒扫描管理,可以针对不同业务环境定制扫描策略,比如扫描对象.描述模式.扫描路 ...

  9. python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解

    python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我 ...

  10. python实战经典例子_Python基础之列表常见操作经典实例详解

    本文实例讲述了Python基础之列表常见操作.分享给大家供大家参考,具体如下: Python中的列表操作 列表是Python中使用最频繁的数据类型[可以说没有之一] 一组有序项目的集合 可变的数据类型 ...

最新文章

  1. RGB Color Codes Chart
  2. CSS-解决苹果点击高亮、安卓select灰色背景(select下拉框在IOS中背景变黑、出现阴影问题)
  3. 大学期末考试SSH试题四
  4. 嵌入式linux pcie网卡配置,嵌入式Linux下PCIE数据采集卡驱动开发
  5. 大事件后台管理系统开发实战(中)
  6. 信息学奥赛一本通 1028:字符菱形 | OpenJudge NOI 1.1 09
  7. latex 编辑文档遇到的问题
  8. Linux工作笔记032---Centos7.3 kill杀掉不用的进程_查看某个进程_某个进程占用的cpu,内存情况
  9. vShield App设计指南[上]
  10. python函数定义中参数列表里的参数是_python-函数(def)参数 及参数解构 变量 知识整理...
  11. java中访问权限控制顺序_Java中的四种访问权限控制 | 学步园
  12. 这几本书看了之后在工作生活上都是有用的
  13. 网站建设的一些基本教程操作
  14. 用ps制作动态图片教程
  15. linux 卸载dnw命令,《转载》linux下利用dnw烧写文件,dnw安装与配置
  16. Yuga Labs 收购 CryptoPunks 的始末
  17. windows2012自动锁定计算机,如何去除 windows server 2012 r2 自动锁定
  18. vue3中播放视频和m3u8后缀的视频解决办法
  19. Leetcode 1345 跳跃游戏 IV
  20. 昨晚,奔奔第一次哭伤心了。。。

热门文章

  1. JavaCC报错:ERROR: Second call to constructor of static parser
  2. IDEA :windows下Hadoop报错null\bin\winutils.exe
  3. 95-140-114-源码-transform-算子project
  4. 95-140-140-源码-transform-双流操作的实现
  5. Nginx+Redis 搭建高性能缓存利器
  6. 结构型设计模式在公司项目中的运用实践
  7. oracle中以dba_、user_、v$_、all_、session_、index_开头
  8. css border渐变_css边框渐变
  9. BZOJ 1922: [Sdoi2010]大陆争霸
  10. Entity Framework Core 中文入门文档