当前位置: 首页 > news >正文

六、Datax通过json字符串运行

Datax通过json字符串运行

  • 一、场景
  • 二、代码实现

一、场景

  • 制作一个web应用,在页面上配置一个json字符串,保存在数据库里面。在执行json的时候,动态在本地创建一个json文件后执行,并识别是否成功,将执行过程保存在数据库中。
    • 写一个函数,传入json字符串
    • 识别datax是否执行成功
    • 获取执行过程的打印信息
    • 提取执行成功的结果信息

二、代码实现

  • python环境支持:2.x、3.x
# -*- coding:utf-8 -*-import re
import tempfile
import subprocessdef re_search(pattern, text, default=""):search_obj = re.search(pattern, text)return search_obj.group(1) if search_obj else defaultdef parse_datax_success_result(output):# 提取执行成功的结果信息return {"start_time": re_search(r'启动时刻\s+:\s+(.*)', output),"end_time": re_search(r'结束时刻\s+:\s+(.*)', output),"total_time": re_search(r'总计耗时\s+:\s+(.*)', output),"average_flow": re_search(r'平均流量\s+:\s+(.*)', output),"write_speed": re_search(r'写入速度\s+:\s+(.*)', output),"total_records": re_search(r'读出记录总数\s+:\s+(\d+)', output),"total_failures": re_search(r'读写失败总数\s+:\s+(\d+)', output),}def datax_run(json_configuration, datax_path="/data/datax/bin/datax.py"):with tempfile.NamedTemporaryFile() as json_configuration_file:# 创建临时文件,程序运行完,文件会自动删除json_configuration_file.write(json_configuration.encode("utf-8"))# 将写入内存缓冲区中的文件,刷入到磁盘中json_configuration_file.flush()# 获取文件路径json_configuration_file_path = json_configuration_file.name# 定义要执行的 datax 命令datax_command = "python %s %s" % (datax_path, json_configuration_file_path)# 使用 subprocess 模块执行命令process = subprocess.Popen(datax_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)# output:命令输出信息# error:错误信息output, error = process.communicate()# 获取命令的返回码return_code = process.returncode# 如果返回码为0,那么是成功is_success = return_code == 0# 如果成功,那么解析datax的结果信息datax_result_info = parse_datax_success_result(output) if is_success else {}return is_success, datax_result_info, output, error, return_codeif __name__ == '__main__':with open("/data/datax/job/oracle_to_mysql.json", "r") as f:print(datax_run(f.read()))

在这里插入图片描述

http://www.lryc.cn/news/302018.html

相关文章:

  • 关于数据库
  • 洛谷C++简单题小练习day14—闰年推算小程序
  • 房企关注的典型数字化场景之一:数字营销
  • BMS再进阶(新能源汽车电池管理系统)
  • K8s Deployment挂载ConfigMap权限设置
  • 百度智能云分布式数据库 GaiaDB-X 与龙芯平台完成兼容认证
  • 模拟电子技术——振荡器基本原理、RC桥式振荡器、矩形波发生电器
  • Vue3+Vite+TS+Pinia+ElementPlus+Router+Axios创建项目
  • VMware虚拟机安装CentOS7
  • Avalonia学习(二十四)-系统界面
  • 深入解析鸿蒙系统的页面路由(Router)机制
  • MCU中断响应流程及注意事项
  • 基于Java SSM框架实现网上报名系统项目【项目源码+论文说明】计算机毕业设计
  • Eclipse - Formatter
  • 算法练习-01背包问题【含递推公式推导】(思路+流程图+代码)
  • Eclipse - Format Comment
  • mqtt 协议的概念和理解
  • 2024年大家都在用的AI写作软件推荐,写作不再是难题
  • CPU是如何工作的?什么是冯·诺依曼架构和哈弗架构?
  • OpenAI视频生成模型Sora的全面解析:从扩散Transformer到ViViT、DiT、NaViT、VideoPoet
  • 【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法
  • 做抖店需要注意的几大点,新手最易踩坑,都给你们总结到这了!
  • 小程序API能力汇总——基础容器API(三)
  • 处理目标检测中的类别不均衡问题
  • (03)Hive的相关概念——分区表、分桶表
  • 2024年首发!高级界面控件Kendo UI全新发布2024 Q1
  • stable diffusion webui学习总结(2):技巧汇总
  • java 培训班预定管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目
  • Python内置函数06——join
  • linux安装单机版redis详细步骤,及python连接redis案例