python模块之getopt

news/2024/9/29 16:01:14 标签: python, android, 开发语言
getopt.getopt(args, shortopts, longopts=[])

解析命令行选项及参数列表。

args:要解析的参数列表,但不包括当前执行的python脚本名称,一般等同于sys.argv[1:]

shortopts:要识别的短选项字符串,如果后接:表示需要给定参数。如ab:c:,表示识别-a, -b-c的短选项,其中-b-c需要后接参数。如果不需要短选项,可以设置为空字符串。

longopts:要识别的长选项列表(不包括--前缀),长选项如果后接=表示需要给定参数,不支持可选参数。如["help", "user=", "password="],表示识别--help, --user=root, --password=123456的长选项。

函数返回值由两个元素组成。第一个是(option, value)元组的列表,第二个是args剥离短选项及其参数和长选项及其参数之后剩余的参数列表。(option, value)元组中的option表示包含---前缀的选项,value表示该option对应的参数,可以为空字符串表示无参数。

python">python tag_sync_batch.py --dt="20240829" --model_db="db_name" --model_table="table_name" --tag_create_type="2" --task_no="1"

一旦遇到非选项参数,将停止选项解析,从该非选项参数开始的所有参数全部视为返回值中的第二个元素 

执行 tag_sync_batch.py 入口

FindArgs __init__

python"># 入参解析
class FindArgs(object):
    def __init__(self, input_args: list):
        self.input_args = input_args

        self.shortopts = "h"
        self.longopts = ["dt=",
                         "test_flag=", "model_db=", "model_table=", "tag_id=",
                         "tag_create_type=", "task_no="
                         ]

        try:
            self.options, self.args = getopt.getopt(self.input_args[0:],
                                                    self.shortopts,
                                                    self.longopts
                                                    )
            for self.name, self.value in self.options:
                # print(self.name, self.value)
                if self.name in ("-h"):
                    self.usage()
                else:
                    # print("self." + self.name.lstrip("--") + ' = "' + self.value + '"')
                    exec("self." + self.name.lstrip("--") + ' = "' + self.value + '"')

            # 日期简单校验规则
            if re.match("^\d{8}$", self.dt):
                pass
            else:
                raise Exception('{dt} is not \d{8} .')

            # 模型与tag_id参数必须二选一,有tag_id 优先tag_id 生效.
            # 都不传则选择所有标签
            try:
                self.tag_id
            except AttributeError:
                # tag_id 未定义 默认变量
                self.tag_id = "all"
                try:
                    # model_table model_db 必须同时存在
                    self.model_table and self.model_db
                except AttributeError:
                    # tag_id不存在时   model_table model_db 默认变量
                    self.model_db = "all"
                    self.model_table = "all"
            else:
                # tag_id存在时 默认变量
                self.model_db = "one"
                self.model_table = "one"

            # 标签类型默认是模型创建
            try:
                self.tag_create_type
            except AttributeError:
                self.tag_create_type = "2"

            try:
                self.task_no
            except AttributeError:
                logging.info(" --task_no is not exists ")
                logging.info(" --task_no args [ 1-清理hive历史数据 | 2-hive横表转纵表 | 3-hive2clickhouses | 4-tag_value2data] ")
                raise -1

        except  getopt.GetoptError:
            raise
            sys.exit()

getopt.gnu_getopt(args, shortopts, longopts=[])

getopt()类似,但默认使用GNU风格的选项解析模式,这意味着选项参数和非选项参数可以混合,而getopt()会在遇到第一个非选项参数时停止解析。

如果shortopts的首字符为+,或者设置了环境变量POSIXLY_CORRECT,同样会在遇到第一个非选项参数时停止解析。

exception getopt.GetoptError

getopt.error异常的别名。以下几种情况将抛出此异常:a)参数列表中存在不能识别的选项b)某个需要传值的选项没有给定值c)传递了值给不需要参数的长选项。

属性msgopt分别表示错误信息和相关选项,opt可能为空字符串。


http://www.niftyadmin.cn/n/5683313.html

相关文章

复试经验分享《一、问答题自测》(408、相关前沿技术)

复试经验分享 一、问答题目自测 优化界面的博客链接 1. 数据结构 1.1 请简述深度优先遍历、广度优先遍历的基本思想 栈、队列。 1.2 简述满二叉树,完全二叉树,二叉排序树,平衡二叉树的特性 1.3 什么是队列的上溢现象和假溢出现象? 解决…

SIGCHLD` 信号详解

SIGCHLD 信号详解 SIGCHLD 信号是专门用于父进程处理子进程状态变化的信号。在 Unix 和 Linux 系统中,当子进程的状态发生变化时,内核会向其父进程发送 SIGCHLD 信号,以通知父进程子进程的终止或状态变更。 1. SIGCHLD 信号的触发条件 SIGCHLD 信号通常在以下几种情况下被…

解锁电商新趋势:探索循环购物模式的盈利与乐趣

亲爱的读者朋友们,今天我将向大家介绍一种新颖的电子商务模式——循环购物模式。你是否好奇,在某些购物平台上,消费1000元为何能获得超过2000元的价值回馈?并且每天还有额外的返现可以领取,这些钱还能轻松提现&#xf…

网络安全法中,个人信息保护的措施和原则有哪些?

《中华人民共和国网络安全法》中关于个人信息保护的规定强调了几项基本原则和措施,以确保个人信息的安全。以下是其中的一些要点: 原则 合法性:个人信息的收集和使用必须符合法律规定。 正当性:信息收集和使用的目的是正当的&…

Golang | Leetcode Golang题解之第442题数组中重复的数据

题目&#xff1a; 题解&#xff1a; func findDuplicates(nums []int) (ans []int) {for _, x : range nums {if x < 0 {x -x}if nums[x-1] > 0 {nums[x-1] - nums[x-1]} else {ans append(ans, x)}}return }

python【入门基础知识】

目录 1、字面量 2、标识符 3、关键字 4、变量 变量的定义 变量的命名 5、注释 单行注释 多行注释 6、行与缩进 多行语句 7、运算符 分类 优先级 8、编程规范 1、字面量 含义&#xff1a;程序中直接写出来固定的值&#xff0c;不是变量或表达式。 分类&#xf…

数据流和数据流处理技术

一数据流 首先明确数据流概念&#xff1a;数据流是连续不断生成的、快速变化的无界数据序列 数据流类型&#xff1a; 数据流大致可以分为四种类型 1.连续型数据流&#xff1a;不断地产生数据&#xff0c;数据稳定速度输入系统。 2.突发型数据流&#xff1a;在某特定时间或…

VR视频怎样进行加密和一机一码的使用?--加密(一)

在视频加密领域&#xff0c;我们常见接触的就是在普通设备上使用的加密视频&#xff0c;如电脑、手机、平板等。Vr的发展和兴起给人们带来最真实的体验感受&#xff0c;不仅在游戏行业应用较广&#xff0c;在一些影院或者元宇宙文旅、展厅等视频场景也备受青睐。 随着VR视频场景…