kettle从入门到精通 第八十三课 ETL之kettle kettle调用python且接收返回值

news2025/1/23 7:22:00

场景:kettle调用python执行脚本,处理之后,再把结果数据流发给下一个步骤。

 看到有个qq群里有个小伙伴求助要实现kettle调用python脚本,然后接收python脚本执行的结果,最后将结果传递到下一个步骤。之前的课程里面介绍的是kettle通过shell步骤调用python脚本,没有接收python返回的结果。今天一起来探索下如何接收python返回的结果。开干!!!

1、编写python demo代码,名字为test2.py

注意:这里的返回值是通过print 进行输出,不是return

# -*- coding: utf-8 -*-

import sys

def main():
    if len(sys.argv) < 2:
        print("Usage: python script_with_args.py <arg1>")
        return
    
    arg1 = sys.argv[1]
    print(f"Argument passed from shell: {arg1}")

if __name__ == "__main__":
    main()

2、将步骤【生成记录】、【JavaScript代码】、【写日志】拖到画布中并连线,如下图所示:

 3、通过JavaScript代码调用test2.py文件,执行环境需要安装python哦,如下图所示:

 JavaScript代码如下:

//Script here

var pythonScriptPath = "D:\\king\\kettle-demo\\test2.py";
var command = "py " + pythonScriptPath+" xiaojingang";

var process = java.lang.Runtime.getRuntime().exec(command);
var reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream()));
var line;
var result = "";

while ((line = reader.readLine()) !== null) {
    result += line;
}

process.waitFor();

 4、保存&运行,javascript正常执行且接收到返回值。

 5、将print代码调整为return,文件为test3.py,测试下是否可以正常运行

# -*- coding: utf-8 -*-

import sys

def main():
    if len(sys.argv) < 2:
        return "Usage: python script_with_args.py <arg1>"
    
    arg1 = sys.argv[1]
    return f"Argument passed from shell: {arg1}"

if __name__ == "__main__":
    main()

 6、保存&运行,javascript正常执行但无法接收到返回值,如下图所示:

 7、继续改造test3.py,在__main__中将main()的执行结果print出来,代码如下:

# -*- coding: utf-8 -*-

import sys

def main():
    if len(sys.argv) < 2:
        return "Usage: python script_with_args.py <arg1>"
    
    arg1 = sys.argv[1]
    return f"Argument passed from shell: {arg1}"

if __name__ == "__main__":
    result= main()
    print(result)

保存&运行,javascript正常执行且可以正常接收到返回值。

总结

print 与 return 的区别

print:当你在 Python 代码中使用 print 时,它将输出内容到标准输出流(stdout)。在 Kettle 中,标准输出可以被捕获并显示在日志或结果中。因此,通过 print 输出的内容可以被 Kettle 读取并显示。

returnreturn 语句用于从函数中返回值。当你在 Kettle 中调用 Python 代码时,返回的值(如果没有直接被打印)不会自动被捕获或传递回 Kettle 的上下文。因此,return 的值不会出现在 Kettle 的输出中。

另外使用java代码步骤也可以调用python且接收返回值,小伙伴们可以自己尝试下。

小伙伴们若还有其他比较好的方案,欢迎评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1978148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bugku-web-xxx二手交易市场

打开题目&#xff0c;点击进入链接&#xff0c;是一个二手交易市场平台 先登录看看 评论了两下&#xff0c;发现<>被注释 对注释字符进行了过滤&#xff0c;无法闭合&#xff0c;sql注入点不存在 看看头像上传&#xff0c;上传文件&#xff0c;抓包 看到后面好长一串…

(001)mysql全接触

1. MySQL 如何优化SQL查询语句? 正确回答通过率&#xff1a;73.0%[ 详情 ] 推荐指数&#xff1a; ★★★★ 试题难度&#xff1a; 中级 建议性操作方案如下&#xff1a; 1&#xff1a;避免全表扫描 考虑在 where 和 order by 涉及的列上建立索引&#xff0c;in 和 not in 也…

ShardingSphere 之ShardingJDBC扩展功能:分片审计、数据加密、读写分离、广播表、绑定表

文章目录 分片审计数据加密读写分离广播表绑定表 分片审计 开发者手册 分片审计功能是针对数据库分片场景下对执行的 SQL 语句进行审计操作。可以对我们要执行的sql进行拦截并进行审核。 目前ShardingSphere内置的分片审计算法只有一个&#xff0c;DML_SHARDING_CONDITIONS。…

教您一键批量下载拼多多批发图片信息,节省时间

图片是电商的核心展示手段&#xff0c;高质量、吸引人的图片能显著提升商品吸引力&#xff0c;增强用户体验&#xff0c;促进购买决策。良好的视觉呈现有助于品牌形象的塑造&#xff0c;提高转化率和客户满意度&#xff0c;对电商平台的流量和销售业绩具有直接影响。 使用图快…

InnoDB锁机制

目录 第一节&#xff1a;锁的基本概念 1. 锁的定义与作用 2. Lock与Latch的区别 3. 锁的占有模式 4. 锁的类型 图文结合示例 Lock与Latch对比图 锁的占有模式兼容性图 锁的类型层次图 第二节&#xff1a;事务隔离级别与MVCC 事务隔离级别 MVCC&#xff08;多版本并发…

《机器人SLAM导航核心技术与实战》第1季:第8章_激光SLAM系统

视频讲解 【第1季】8.第8章_激光SLAM系统-视频讲解【第1季】8.1.第8章_激光SLAM系统_Gmapping算法-视频讲解【第1季】8.2.第8章_激光SLAM系统_Cartographer算法-视频讲解【第1季】8.3.第8章_激光SLAM系统_LOAM算法-视频讲解 第1季&#xff1a;第8章_激光SLAM系统 先 导 课第…

用2点结构标定3点结构的顺序

在行列可自由变换的平面上2点结构只有3个 (A,B)---6*30*2---(0,1)(1,0) 让A分别是2a1&#xff0c;2&#xff0c;3&#xff0c;让B全是0。当收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值&#xff0c;得到 结构 迭代次数 2a1 58742.717 1.00001 2a2 80796.605 1…

如何在uniapp上隐藏默认导航栏

当要定义导航栏&#xff0c;使用uni.switchTab来跳转页面时&#xff0c;需要将默认的导航栏进行隐藏。 比如使用 uni.hideTabBar(); 去隐藏的话&#xff0c;可能会有闪现出现的可能性。 我们可以在package.json当中的 tabBar加"custom": true。例: "tabBar&q…

【TS】TypeScript类型断言:掌握类型转换的艺术

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript类型断言&#xff1a;掌握类型转换的艺术1. 引言2. 什么是类型断言&a…

基于特性价值来确认测试重点

目录 核心特性&#xff1a; 潜力特性&#xff1a; 噱头特性&#xff1a; 辅助特性&#xff1a; 无人问津的特性&#xff1a; 测试重点的确立&#xff1a; 软件的特性包含如下几种&#xff0c;核心特性&#xff0c;潜力特性&#xff0c;噱头特性&#xff0c;无人问津特性&…

Project Euler_Problem 277_A Modified Collatz Sequence

原题目&#xff1a; 题目大意&#xff1a; 一串字母可以视作迭代过程中每一轮除3余多少&#xff0c;问最小的大于1e15的满足那串序列的数是多大 解题思路&#xff1a;可以把那一大串字母&#xff0c;看作是不停地对初始数值x做连续运算&#xff0c;且每一轮运算的结果都应当是…

03:【stm32】GPIO

GPIO 1、芯片的引脚分布2、IO复用与重映射3、片上外设GPIO3.1、GPIO的寄存器组3.2、8种工作模式3.3、最大输出速度3.4、GPIO的内部结构 1、芯片的引脚分布 STM32F103C8T6这款芯片一共有48个引脚&#xff0c;他们分为了特殊功能引脚和普通的IO引脚。其中特殊功能的引脚有如下几个…

一键搬运TEMU、SHEIN店铺起新店。商品一键复制,商品裂变,TEMU商品复制

店铺搬家&#xff0c;一键搬运TEMU、SHEIN店铺起新店。商品一键复制&#xff0c;裂变新类目。铺店群必备 店铺搬家是什么&#xff1f; 店铺搬家就是将Temu一个店铺的所有商品快速搬到另一个店铺&#xff0c;只需要半个小时就能起一个全新的店铺&#xff0c;可以帮助商家快速起新…

comfyUI-MuseTalk的参数设置

comfyUI-MuseTalk的参数设置 目录 comfyUI-MuseTalk的参数设置 一、ComfyUI-VideoHelperSuite 二、comfyUI-MuseV合成的参考视频 2.1、什么时候会用到MuseV&#xff1f; 2.2、MuseV特别消耗系统内存 2.2.1、测试图片序列的像素比 2.2.2、影响运动范围和生成结果的参数 …

无法安装Python包,出现OSError: 拒绝访问错误

无法安装Python包&#xff0c;出现OSError: 拒绝访问错误 在安装Python包时&#xff0c;可能会遇到各种错误&#xff0c;其中“OSError: 拒绝访问”是一个比较常见的问题。这个错误通常表明在安装过程中&#xff0c;Python没有足够的权限去访问某个文件或目录。本文将深入探讨…

【LeetCode】45.跳跃游戏II

1. 题目 2. 分析 很久没有写贪心的题了&#xff0c;在这题上卡了很久时间&#xff0c;我这个还是不会贪心。 核心思想就一句话&#xff1a;维护在到达本次最远位置之前能达到的最远位置。每到边界时就更新步数&#xff0c;便得到正确答案。 3. 代码 class Solution:def jum…

微软商店无法加载,检查你的连接-解决方案

微软商店默认直连国内的服务器。 如果有代理&#xff0c;关闭代理就可以恢复网络了。 但是我就是想用代理&#xff0c;我感觉代理更快&#xff0c; 搜索了很多办法&#xff0c;都没有生效。 然后我在哔哩哔哩的视频下方&#xff0c;看到大家留言&#xff0c;测试了一下&#x…

Qt/C++项目积累: 2.主机监控器 - 2.3 实时数据及其他功能完善

相关链接&#xff1a; 链接1&#xff1a;Qt/C项目积累&#xff1a; 2.主机监控器 - 2.1 项目介绍-CSDN博客https://blog.csdn.net/qq_22122811/article/details/140254896 链接2&#xff1a;Qt/C项目积累&#xff1a; 2.主机监控器 - 2.2 历史功能实现-CSDN博客https://blog.…

ARM 架构硬件新趋势:嵌入式领域的未来

目录 目录 一、ARM 架构概述 二、新趋势一&#xff1a;AI 加速器集成 三、新趋势二&#xff1a;更高效的电源管理 四、新趋势三&#xff1a;安全性增强 五、结语 随着物联网 (IoT) 和边缘计算的发展&#xff0c;ARM 架构在嵌入式系统中的应用越来越广泛。从智能手机到智能…

STM32H7无RTOS应用堆栈机制与检测

摘要&#xff1a;单片机堆栈溢出会引发不可预知的错误。本文探讨了基于STM32CubeIDE设置STM32H7xx堆栈在无RTOS时的使用与检测方法。 一、堆栈的设置 STM32CubeIDE对工程设置堆栈很简单&#xff0c;在CubeMX中设置最小size如下图 堆&#xff08;Heap&#xff09;为0x400&#…