Python与Kettle互相控制
一、概述
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时,会因为编码问题出现无法识别的汉字,导致调用失败。
如果有大佬知道该如何解决这个问题,希望不吝赐教。