Python与Kettle互相控制

发布时间 2023-04-10 22:04:05作者: qsl_你猜

一、概述

1.1 目的

Kettle与Python属于两个非常好用的自动化工具,对于数据分析师来说,两个软件的侧重点不同。

如果两个软件可以相互控制,则可以集中两个软件的优点。

 

1.2 环境

系统:win11

Python:3.9

Kettle:9.3.0.0-428

 

1.3 控制方式

Kettle可以直接控制Python,Python无法直接控制Kettle,

但是Python可以控制bat文件,bat文件可以控制Kettle,进而实现Python控制Kettle。

 

 

 

 

 

 二、控制链条

2.1 被控制脚本

该脚本实现新建一个文件夹,如果文件夹被创建,则执行成功,否则执行失败。

import os
import shutil


def clean_file(file_name):
    if os.path.isdir(file_name):
        shutil.rmtree(file_name)
        os.makedirs(file_name)
    else:
        os.makedirs(file_name)


clean_file(r'E:\博客\新建测试文件夹')

 

2.2 Kettle控制Python

注意脚本的名称:Kettle脚本run_python是英文,不要用汉字,kettle脚本的路径也不要出现汉字。

 

 

2.3 bat控制kettle

使用notepad++写代码。

注意代码中不带任何汉字,使用ANSI编码。

D:

cd D:\soft\kettle\data-integration

Kitchen.bat /file D:\soft\kettle\script\job\run_python.kjb /level Basic >>D:\soft\kettle\script\job\fjzx_%date:~0,4%%date:~5,2%%date:~8,2%.log

 

这段代码的意思如下,因为不能带汉字,我把注释全删除了。

 带汉字也能跑赢代码,但是就几行,记住就行了

:: Kitchen.bat 所在路径盘
D:
:: Kitchen.bat 所在目录
cd D:\soft\kettle\data-integration
:: job作业的文件路径
:: 使用Kitchen.bat执行job作业,并写入日志
Kitchen.bat /file D:\soft\kettle\script\job\run_python.kjb /level Basic >>D:\soft\kettle\script\job\fjzx_%date:~0,4%%date:~5,2%%date:~8,2%.log

 

 

2.4 Python控制bat

Python脚本如下

import os
os.system(r'D:\soft\kettle\Kettle.bat')   # bat文件路径

 

2.5 为什么涉及到Kettle的都不可以用汉字

如果是汉字,Kettle需要使用ANSI编码,所以bat代码的编码形式ANSI。

但是Python是utf-8编码。

当Python调用bat时,会因为编码问题出现无法识别的汉字,导致调用失败。

如果有大佬知道该如何解决这个问题,希望不吝赐教。