六、Datax通过json字符串运行

文章描述了一个场景,如何在Web应用中通过JSON字符串配置Datax,然后在本地执行并捕获执行结果。提供了一个Python函数`datax_run`用于处理此过程,包括创建临时JSON文件、执行Datax命令和解析执行结果。
摘要由CSDN通过智能技术生成

Datax通过json字符串运行

一、场景

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

二、代码实现

  • python环境支持:2.x、3.x
# -*- coding:utf-8 -*-

import re
import tempfile
import subprocess


def re_search(pattern, text, default=""):
    search_obj = re.search(pattern, text)
    return search_obj.group(1) if search_obj else default


def 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_code


if __name__ == '__main__':
    with open("/data/datax/job/oracle_to_mysql.json", "r") as f:
        print(datax_run(f.read()))

在这里插入图片描述

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值