【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]))


if __name__ == "__main__":
    main()

【Python学习 】Python获取命令行参数的方法
下面我们通过命令行来运行该python脚本

1.1、不传递参数

(venv) C:\Code Python\SMTP>python test.py
参数个数为: 1 个参数。
参数列表: ['test.py']
脚本名为: test.py

【Python学习 】Python获取命令行参数的方法
识别到的参数只有一个,就是脚本名 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>

【Python学习 】Python获取命令行参数的方法
识别到的参数有3个,分别是脚本名 test.py,参数 1 为:ouyangpeng,参数 2 为:csdn

1.3、传递多个参数和命令行选项

(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

【Python学习 】Python获取命令行参数的方法
识别到的参数有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])
方法参数说明:

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 <username> -p <password>')
        print('   or: test_arg.py --username=<username> --password=<password>')
        sys.exit(2)

    # 处理 返回值options是以元组为元素的列表。
    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>')
            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、不传递参数

(venv) C:\Code Python\SMTP>python test_arg.py
username为:
password为:

(venv) C:\Code Python\SMTP>

【Python学习 】Python获取命令行参数的方法
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>

【Python学习 】Python获取命令行参数的方法

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>

【Python学习 】Python获取命令行参数的方法
2.4.4、使用短格式选项,传递参数

(venv) C:\Code Python\SMTP>python test_arg.py -u ouyangpeng -p csdn
username为: ouyangpeng
password为: csdn

(venv) C:\Code Python\SMTP>
【Python学习 】Python获取命令行参数的方法

2.4.5、使用长格式选项,传递参数

(venv) C:\Code Python\SMTP>python test_arg.py --username=ouyangpeng --password=csdn
username为: ouyangpeng
password为: csdn

(venv) C:\Code Python\SMTP>

【Python学习 】Python获取命令行参数的方法
2.4.6、使用长短混合格式选项,传递参数

(venv) C:\Code Python\SMTP>python test_arg.py -u ouyangpeng --password=csdn
username为: ouyangpeng
password为: csdn

(venv) C:\Code Python\SMTP>

【Python学习 】Python获取命令行参数的方法
2.4.7、使用格式选项,传递部分参数

(venv) C:\Code Python\SMTP>python test_arg.py -u ouyangpeng
username为: ouyangpeng
password为:

(venv) C:\Code Python\SMTP>

【Python学习 】Python获取命令行参数的方法
2.4.8、传递错误的选项参数

(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>

【Python学习 】Python获取命令行参数的方法

2.4.9、传递选项参数以及不带选项的参数

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学习 】Python获取命令行参数的方法

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
【Python学习 】Python获取命令行参数的方法

二、Python必备开发工具

【Python学习 】Python获取命令行参数的方法

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
【Python学习 】Python获取命令行参数的方法

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
【Python学习 】Python获取命令行参数的方法

五、Python练习题

检查学习结果。
【Python学习 】Python获取命令行参数的方法

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
【Python学习 】Python获取命令行参数的方法
【Python学习 】Python获取命令行参数的方法
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

【Python学习 】Python获取命令行参数的方法

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年3月9日
下一篇 2023年3月9日

相关推荐