简介

除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解析命令行参数内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python实现解析命令行参数的常见方法总结的更多相关文章

  1. xcode – 如何通过LLDB命令行添加断点操作?

    如果你从Xcode编辑一个断点,有一个超级有用的选项,可以添加一个“Action”,以便在每次遇到断点时自动执行.如何从LLDB命令行添加此类操作?

  2. 在Sierra上,Brew安装错误单独使用Xcode是不够的

    我正在尝试使用HomeBrewv1.3.8在运行xCodev9.1的MacOSXSerrav10.12.6上安装软件包.安装和错误是然后我运行命令表示软件更新服务器无法使用命令行工具包.我进入xCode,它表明安装了命令行工具.任何帮助将非常感激.西奥解决方法我去了AppleDeveloper网站并直接下载了命令行工具dmg.首先需要设置Apple帐户.命令行工具可在以下位置找到–https://

  3. ios – 通过真实设备上的命令行进行UIAutomation

    提前谢谢解决方法您需要为其提供.ipa文件的路径.它实际上只需要应用程序名称,因此您只需传入应用程序名称即可.非常重要:应用程序需要安装在设备上,Instruments不会在设备上安装应用程序,它只会在设备上运行已安装的应用程序

  4. ios7 – Xcode 5命令行代码签名错误

    有没有人遇到过Xcode5(Build版本5A11344j)命令行工具无法在Xcode4.6.3(Build版本4H1503)中构建以前成功构建的项目的情况.错误消息如下:“检查依赖项代码签名错误:未找到代码签名标识:未找到与构建设置(“”)中指定的配置文件匹配的代码签名标识(即证书和私钥对).CodeSign错误:SDK“iOS7.0”中的产品类型“应用”需要代码签名“非常感谢任何见解.谢谢!解

  5. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  6. 安装命令行工具Xcode 5

    我已经尝试过并尝试过但我仍然无法解决问题.我正在尝试安装PebbleSDK1.12并安装Xcode5的命令行工具.每次我在终端尝试xcode-select–install时,我都会收到“无法安装软件,因为它目前在软件更新服务器中不可用”我试图重新安装Xcode,但是没有用.当我进入Xcode-preferences-downloads时,没有命令行工具的部分.我也试过从开发者网站安装它们但无济于事.下载看起来正确,然后我去Xcode看到首选项,并没有列出命令行工具.你们都能提出什么建议吗?

  7. xcode – 命令行工具的静态分析器问题

    我们通过使用TeamCity/命令行工具自动化我们当前项目的构建.为了确保尽可能多地捕获潜在的问题,我们已经将项目设置为对每个构建使用静态分析器.几个第三方课程被分析仪标记,所以我们排除了可疑类,标记为:一切都按照预期的方式编译在Xcode中(用4.6.3和5.0.1测试).但是,当在TeamCity服务器上编译时,我们会收到每个排除的第三方文件的以下错误:如果我们删除了-Xanalyzer-an

  8. 从命令行确定Xcode派生的数据位置

    有没有办法从命令行确定您的派生数据文件夹的位置是用xcodebuild构建后的?

  9. Xcode 7:无法使用单元测试目标创建Swift命令行工具

    我受阻了如果我创建一个MacOSCocoa应用程序,我可以免费获得一个单元测试目标.但是我想编写一个命令行工具,并写一些单元测试.如果我能弄清楚,我会被伤害我已经足够远,我有一个命令行目标和一个测试目标.我可以“@testableimport”我的commnd行模块,并使用测试代码中的代码,Xcode中没有错误.但是,一旦我尝试运行我的测试,我得到一个链接错误.主模块中的任何类都不能链接.什么?

  10. 如何从命令行中删除iOS 8 Simulator中的应用程序?

    我有一个在iOS模拟器中运行的自动化,我必须在另一次运行之前删除.如何从命令行从iOS模拟器中删除该应用程序?

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部