首页 > 编程语言 >【Python脚本】getopt参数解析笔记

【Python脚本】getopt参数解析笔记

时间:2024-10-10 11:49:44浏览次数:9  
标签:actual Python device version 参数 expected getopt 解析

getopt参数解析笔记

背景

在 Python 中,使用 getopt 模块进行命令行参数解析是常见的需求。在编写脚本时,正确地定义参数选项对于确保程序正常运行至关重要。这是一个用于检测安卓软件版本的脚本一部分,有些用法和笔记分享给大家

问题描述

在某个脚本中,使用 getopt 解析命令行参数时,发现如果指定参数选项但不传递参数就会导致后续所有参数无法正确接收参数。发现参数定义还分两种情况。

所有参数选项必须带参数的定义传参

opts, args = getopt.getopt(sys.argv[1:], "e:a:d:o:n:", ["expected=", "actual=", "device", "out", "sn="])

-d/-o都不需要参数的传参定义

opts, args = getopt.getopt(sys.argv[1:], "e:a:dd:oo:n:", ["expected=", "actual=", "device", "out", "sn="])
#or
opts, args = getopt.getopt(sys.argv[1:], "e:a:d o n:", ["expected=", "actual=", "device", "out", "sn="])

原因分析
参数需求:
使用冒号(:)表示该选项后面需要跟随参数。例如,-e 选项后需要一个期望的版本号。
将 -d 和 -o 定义为 d: 和 o: 表示它们后面需要参数,而实际上它们是布尔开关,不需要参数。

解决方案
通过将 -d 和 -o 重复定义为 dd: 和 oo:,也不需要参数。
通过将 -d 和 -o 去除引号定义为 d 和 o ,定义为布尔开关,不需要参数。

示例代码
以下是完整的示例代码,展示如何正确解析命令行参数:

import sys
import getopt

if __name__ == '__main__':
    print("parameter:")

    try:
        opts, args = getopt.getopt(sys.argv[1:], "e:a:dd:oo:n:", ["expected=", "actual=", "device", "out", "num="])
    except getopt.GetoptError as err:
        print(f"Error: {err}")
        sys.exit(1)

    expected_version = None
    actual_version = None
    device = False
    out_param = False
    device_num = None

    print(f"opts: {opts}")  # 打印解析的选项

    for opt, arg in opts:
        if opt in ('-e', '--expected'):
            expected_version = arg
            print(f"Expected version: {expected_version}")
        elif opt in ('-a', '--actual'):
            actual_version = arg
            print(f"Actual version: {actual_version}")
        elif opt in ('-d', '--device'):
            device = True
            print("Device mode selected.")
        elif opt in ('-o', '--out'):
            out_param = True
            print("Output mode selected.")
        elif opt in ('-n', '--sn'):
            device_num = arg

    # 后续逻辑...

实际运行
运行命令时,可以使用以下格式:

python3 ./build_scripts/ParseDLToolsVersion/checkComponentVersions2.py -o -e ./build_scripts/release_info/prebuild_version_expected.txt -a ./o
utversion.txt
parameter:
opts: [('-o', ''), ('-e', './build_scripts/release_info/prebuild_version_expected.txt'), ('-a', './outversion.txt')]

总结

去掉冒号:确保 -d 和 -o 不带冒号,以便它们被视为布尔开关。
理解参数定义:通过理解 getopt 的参数定义规则,可以避免常见的解析错误,确保命令行参数能够被正确处理。

标签:actual,Python,device,version,参数,expected,getopt,解析
From: https://blog.csdn.net/CatShitK/article/details/142817592

相关文章

  • OCR+PDF解析配套前端工具开源详解!
    面对日常生活和工作中常见的OCR识别、PDF解析、翻译、校对等场景,配套的可视化工具能够极大地提升我们的使用体验和工作效率。通过可视化界面,我们可以直观地看到文本识别、解析和翻译的结果,便捷评估产品效果。今天来跟大家分享一个非常棒的开源项目——TextInParseX-Frontend,帮......
  • [Python手撕]第 k 个缺失的正整数
    给你一个严格升序排列的正整数数组arr和一个整数k。请你找到这个数组里第k个缺失的正整数。示例1:输入:arr=[2,3,4,7,11],k=5输出:9解释:缺失的正整数包括[1,5,6,8,9,10,12,13,...]。第5个缺失的正整数为9。示例2:输入:arr=[1,2,3,4],k=2输出:6解释:缺......
  • 基于Python后端构建多种不同的系统终端界面研究
    在我们一般开发系统的时候,往往会根据实际需要做出各种不同的系统终端界面,如基于BS的,CS、APP、小程序等等,一般都是基于一个统一接入的WebAPI后端,本篇系统探寻对基于Python后端构建多种不同的系统终端界面研究,介绍一些基于Python后端开发的不同终端界面。1、Python系统终端界面我......
  • 最新毕设-Python-旅游数据分析与可视化系统-48196(免费领项目)可做计算机毕业设计JAVA、
    基于python的旅游数据分析与可视化系统的设计与实现摘 要本文旨在设计和实现一个基于Python的旅游数据分析可视化系统。该系统以旅游数据为研究对象,利用Python的数据处理能力和可视化技术,对旅游数据进行深入分析,并通过直观的可视化图表展示分析结果。本文首先介绍了旅游数......
  • python程序停到这个地方 client_socket, address = server_socket.accept()
    停到这个地方 client_socket,address=server_socket.accept() 这行代码是在等待客户端的连接请求。server_socket.accept()是一个阻塞调用,它会一直等待有客户端连接上来,然后返回一个新的套接字对象client_socket和客户端的地址address。如果你的程序在这一行停止,可能......
  • 用Python类实现装饰器
    用Python类实现装饰器为什么使用类实现装饰器?类装饰器的实现增加状态的类装饰器带参数的类装饰器为什么使用类实现装饰器?在某些情况下,我们可能希望装饰器保存状态、初始化一些参数,或者通过对象的方法操作。这时,用类实现装饰器会显得更为灵活和合理。类装饰器允许我们......
  • 深入理解 Python 中的 object
    深入理解Python中的object什么是object()?object()的作用和特点object是所有类的基类基础且不可变的对象object提供基本的对象行为object()作为占位符为什么要了解object?什么是object()?object()是Python的一个内置函数,它用于创建一个最基础的对象实例。......
  • Python 给函数加上状态的多种方式
    Python给函数加上状态的多种方式为什么要给函数加状态?方法一:使用函数属性方法二:使用闭包方法三:使用类方法四:使用装饰器为什么要给函数加状态?通常,函数是无状态的:每次调用它都会从相同的初始状态开始执行。而有时候,我们希望函数在多次调用之间能够保留某些信息,例如记......
  • 递归下降--自顶向下的解析方法
    递归下降(RecursiveDescentParsing)是一种自顶向下的解析方法,用于解析编程语言的语法或表达式。它通过使用一组递归的函数来处理文法规则(通常是上下文无关文法),从而将输入字符串解析为语法树或抽象语法树(AST)。递归下降解析器是手工编写的,因此可以根据具体需要灵活地控制解析行为......
  • Android反编译APK与解析软件包img
    1,Jadx反编译APK下载JadxJADX相当于是apktool+dex2jar+jd-gui的结合体,既能反编译代码也能反编译资源支持的文件有:(apk,dex,jar,class,smali,zip,xapk,aar,arsc,jadx,aab)等。打开之后界面如下,点击打开文件,再选择对应所需要反编译的apk(或者直接拖入apk)等......