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 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__
# 入参解析
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)
传递了值给不需要参数的长选项。
属性msg
和opt
分别表示错误信息和相关选项,opt可能为空字符串。