Python实现解析命令行参数的常见方法总结

 更新时间:2022年10月23日 10:44:26   作者:玩转测试开发  
除ide的执行方式外,命令行的方式执行Python脚本是参数化程序执行的一种常见且简单的方法。本文总结了三个常见的获取和解析命令行参数的方法,需要的可以参考一下

简介

除ide的执行方式外,命令行的方式执行Python脚本是参数化程序执行的一种常见且简单的方法,正确处理命令行参数,可以提供给包含某种参数化信息的程序或脚本的参数。例如处理目录或者文件通常作为命令行参数传递给脚本,用于使程序可以处理不同图片或者不同类型文件。

基本形式

python main.py -a v1 -b v2 ...

3种常见的获取和解析命令行参数的方法

1、sys.argv

2、getopt

3、argparse

sys.argv案例

1、sys.argv返回一个列表,第一个值为脚本名称,列表的值类型为string。

2、参数数量:len(sys.argv)

3、获取全部参数:sys.argv

案例源码1

# -*- coding: utf-8 -*-
# time: 2022/9/1 0:10
# file: args_demo.py
# 公众号: 玩转测试开发
import sys


def f1():
    print(f"正在运行的脚本名称: {sys.argv[0]}")
    print(f"脚本的参数数量: {len(sys.argv)}")
    print(f"脚本的参数: {sys.argv}")


if __name__ == '__main__':
    f1()

执行结果:

getopt案例:getopt 模块是专门处理命令行参数的模块,用于获取命令行选项和参数。命令行选项使得程序的参数更加灵活,其支持短选项模式(-)和双-选项模式(--)。该模块提供了两个方法及一个异常处理来解析命令行参数。

语法格式:

getopt.getopt(args, options[, long_options])

参数说明:

args:要解析的命令行参数列表,一般是sys.argv[1:],需要过滤掉脚本名(sys.argv[0])

options:以字符串的格式定义,options 后的冒号 “:” ,表示如果设置该选项,必须有附加的参数,否则就不附加参数

long_options:以列表的格式定义,long_options 后的等号 “=” ,表示该选项必须有附加的参数,不带冒号表示该选项不附加参数

案例源码2

# -*- coding: utf-8 -*-
# time: 2022/9/1 0:10
# file: args_demo.py
# 公众号: 玩转测试开发
import sys
import getopt


def f1():
    print(f"正在运行的脚本名称: {sys.argv[0]}")
    print(f"脚本的参数数量: {len(sys.argv)}")
    print(f"脚本的参数: {sys.argv}")


def f2(argv):
    input_file = ""
    output_file = ""
    opts, args = getopt.getopt(argv[1:], "hi:o:", ["help", "input_file=", "output_file="])

    # "hi:o:": 短格式分析串, h 后面没有冒号, 表示后面不带参数; i 和 o 后面带有冒号, 表示后面带参数
    # ["help", "input_file=", "output_file="]: 长格式分析串列表, help后面没有等号, 表示后面不带参数; input_file和output_file后面带冒号, 表示后面带参数
    # 返回值包括 `opts` 和 `args`, opts 是以元组为元素的列表, 每个元组的形式为: (选项, 附加参数),如: ('-i', 'test.png');
    # args是个列表,其中的元素是那些不含'-'或'--'的参数

    for opt, arg in opts:
        if opt in ("-h", "--help"):
            # 即:处理 -h参数的案例说明,帮助文档等
            print('args_demo.py -i <input_file> -o <output_file>')
            print('or: args_demo.py --input_file=<input_file> --output_file=<output_file>')
            sys.exit()
        elif opt in ("-i", "--input_file"):
            input_file = arg
        elif opt in ("-o", "--output_file"):
            output_file = arg
    print(f'输入文件为:{input_file}')
    print(f'输出文件为:{output_file}')

    # 打印不含'-'或'--'的参数
    for i in range(0, len(args)):
        print(f'不含 - 或 -- 的参数 {i + 1} 为:{args[i]}')


if __name__ == '__main__':
    # f1()
    f2(sys.argv)

命令行依次执行:

python args_demo.py -h
python args_demo.py -i a.txt
python args_demo.py -o b.txt
python args_demo.py -i a.txt  -o b.txt c.txt

执行结果:

Exception getopt.GetoptError:在参数列表中没有找到所传递参数,或选项的需要的参数为空时会触发该异常。异常的参数是一个字符串,表示错误的原因。属性 msg 和 opt 为相关选项的错误信息。在上述代码中添加异常处理,检查此错误信息。

使用错误的格式选项传递参数执行脚本:python args_demo.py -q

argparse案例:当程序中使用采用复杂参数或多个文件名时,推荐使用 Python 的 argparse 库,它以系统的方式处理命令行参数,从而可以编写用户友好的命令行程序。Python 标准库 argparse 同样也是用于解析命令行参数的模块。首先,由程序确定所需的参数,然后 argparse 将这些参数解析为 sys.argv。此外,argparse 会生成帮助和使用信息提示,并在提供无效参数时发出错误。为了介绍此模块,编写 argparse_demo1.py,如下所示:

为了介绍此模块,编写 argparse_demo1.py,如下所示:

案例1

不带参数运行此脚本不会向 stdout 显示任何内容。但是,如果使用 --help 或 -h 选项,将得到脚本的使用信息提示

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()

执行结果:

(venv)>python argparse_demo.py -h
usage: argparse_demo.py [-h]

optional arguments:
  -h, --help  show this help message and exit

(venv)>python argparse_demo.py --help
usage: argparse_demo.py [-h]

optional arguments:
  -h, --help  show this help message and exit

案例2

指定其他参数会导致错误python argparse_demo.py -q

python argparse_demo.py -q
usage: argparse_demo.py [-h]
argparse_demo.py: error: unrecognized arguments: -q

案例3

添加一个参数需要调用方法 parser.add_argument

# -*- coding: utf-8 -*-
# time: 2022/8/31 16:20
# file: argparse_demo1.py
# author: tom
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("name", help="添加的第1个参数name,姓名。")
args = parser.parse_args()
print(f"args.name:{args.name}")
print(f"type:{type(args.name)}")

使用范例:

python argparse_demo1.py tom
python argparse_demo1.py -h
python argparse_demo1.py

执行结果:此时不带参数运行脚本则抛出缺少参数name

(venv) >python argparse_demo.py tom
args.name:tom
type:<class 'str'>

(venv) >python argparse_demo.py -h
usage: argparse_demo.py [-h] name

positional arguments:
  name        添加的第1个参数name,姓名。

optional arguments:
  -h, --help  show this help message and exit

(venv) >python argparse_demo.py
usage: argparse_demo.py [-h] name
argparse_demo.py: error: the following arguments are required: name

使用--的形式:使用-的形式则--name改成 -name即可。

案例4

argparse 将提供的选项默认视为字符串,新增int类型的案例

# -*- coding: utf-8 -*-
# time: 2022/8/31 16:20
# file: argparse_demo1.py
# author: tom
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--name", help="添加的第1个参数name,姓名。")
parser.add_argument("--age", help="添加的第2个参数age,年龄。", type=int)
args = parser.parse_args()
print(f"args.name:{args.name}")
print(f"type:{type(args.name)}")

print("*" * 50)

print(f"args.age:{args.age}")
print(f"type:{type(args.age)}")

使用范例:可使用两种形式 --key=value  /  --key value

python argparse_demo.py --name=tom --age=30
python argparse_demo.py --name tom --age 30

执行结果:

(venv) >python argparse_demo.py --name=tom --age=30
args.name:tom
type:<class 'str'>
**************************************************
args.age:30
type:<class 'int'>

(venv) >python argparse_demo.py --name tom --age 30
args.name:tom
type:<class 'str'>
**************************************************
args.age:30
type:<class 'int'>

到此这篇关于Python实现解析命令行参数的常见方法总结的文章就介绍到这了,更多相关Python解析命令行参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在OpenCV里实现条码区域识别的方法示例

    在OpenCV里实现条码区域识别的方法示例

    这篇文章主要介绍了在OpenCV里实现条码区域识别的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Python爬虫之超级鹰验证码应用

    Python爬虫之超级鹰验证码应用

    众所周知python是一个很强大的语言,它拥有众多的库,今天我尝试了使用超级鹰第三方平台进行验证码的开发,需要的朋友可以参考下
    2022-08-08
  • python使用装饰器作日志处理的方法

    python使用装饰器作日志处理的方法

    今天小编就为大家分享一篇python使用装饰器作日志处理的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Pandas中DataFrame.head()函数的具体使用

    Pandas中DataFrame.head()函数的具体使用

    DataFrame.head()是Pandas库中一个非常重要的函数,用于返回DataFrame对象的前n行,本文主要介绍了Pandas中DataFrame.head()函数的具体使用,感兴趣的可以了解一下
    2024-07-07
  • Python Google风格注释的使用

    Python Google风格注释的使用

    Google风格注释是一种Python代码注释的标准化格式,它提供了一种规范的注释格式,使得代码更加易读、易于维护,本文就来介绍一下Google风格注释的语法和用法,感兴趣的可以了解一下
    2023-11-11
  • Flask  response 对象详情

    Flask  response 对象详情

    在 Flask 中,响应使用 Response 对象表示,响应报文中的大部分内容由服务器处理,一般情况下,我们只负责返回主体内容即可。在之前的文章中,我们了解到 Flask 会先匹配请求 url 的路由,调用对应的视图函数,视图函数的返回值构成了响应报文的主体内容。
    2021-11-11
  • django模型动态修改参数,增加 filter 字段的方式

    django模型动态修改参数,增加 filter 字段的方式

    这篇文章主要介绍了django模型动态修改参数,增加 filter 字段的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 利用Python实现电影订票系统

    利用Python实现电影订票系统

    这篇文章主要介绍了利用Python实现电影订票系统,一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符画,需要的朋友可以参考一下
    2022-03-03
  • python编写adb截图工具的实现源码

    python编写adb截图工具的实现源码

    adb截图工具可用于Android手机及Android终端,Android端或者Android终端的远程截图至本地电脑中,今天通过本文给大家介绍python编写adb截图工具的实现源码,感兴趣的朋友一起看看吧
    2021-08-08
  • python填充彩色图形的实现示例

    python填充彩色图形的实现示例

    本文主要介绍了python填充彩色图形的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04

最新评论