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

news/2025/3/18 18:47:10/文章来源:https://www.cnblogs.com/zjBoy/p/18338729

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

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

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

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

# -*- coding: utf-8 -*-import sysdef main():if len(sys.argv) < 2:print("Usage: python script_with_args.py <arg1>")returnarg1 = sys.argv[1]print(f"Argument passed from shell: {arg1}")if __name__ == "__main__":main()

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

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

 JavaScript代码如下:

//Script herevar 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 sysdef 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 sysdef 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.hqwc.cn/news/777673.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻防世界的一些题目

攻防世界的一些题目 唉,一些题目做的还是磕磕绊绊的,好菜啊,得加把劲了,马上要省赛了。。。 misc 如来十三掌 附件是一个docx,打开之后 夜哆悉諳多苦奢陀奢諦冥神哆盧穆皤三侄三即諸諳即冥迦冥隸數顛耶迦奢若吉怯陀諳怖奢智侄諸若奢數菩奢集遠俱老竟寫明奢若梵等盧皤豆蒙密…

6.交换机及其配置

6.1 交换机的基本概念# 路由器工作在:第三层网络层,跨局域网传输 交换机工作在:第二层数据链路层,在局域网内传输在PC2 ping 一下PC3 的IP交换机自动就会记录他们的MAC地址和端口号6.2 交换表的内容 小型交换机大型交换机6.3 交换机的交换模式直通-快速转发:知道地址后就…

5.局域网技术基础与应用

5.1 局域网基础 属于物理层和数据链路层共享式:布在一条线上类似 交换式:在一个交换机上 虚拟:也是通过交换机表示层:负责压缩5.2 综合布线系统设计(上)设备间子系统一般在一楼 管理子系统一般在二楼 水平子系统类似拉出来的网线118015.3 综合布线系统设计(下)多介质信…

Git 智能传输协议

Git - Transfer Protocols (git-scm.com) Git中存在两种传输数据的协议:“dump”和“smart”协议。 Dump 协议 类似HTTPS的Get请求,因为其安全性,已经很少被使用了。 获取内容的大致流程:获取info/refs 获取Head 然后一次获取object对象。(loose形式) 若获取某一对象失败…

[图文直播]Jenkins单分支流水线任务实操

前言 去年的时候,工作角色被定义为去做中台服务,虽然这个工作并不是我职业规划的主线,但正好也借此机会,去解决掉我“闭环能力”中一个暂时缺失的环节,我对自己的定位一直都是要做一个“极限单兵”,希望在地质专业软件这个相对细分的领域,做到自己能完全闭环下面的各个阶…

笔试查漏补缺

笔试查漏补缺 1:排序算法常用时间复杂度: 快速排序 快速排序的核心操作是“哨兵划分”,其目标是:选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体来说,哨兵划分的流程如图所示。选取数组最左端元素作为基准数…

Rust项目的代码组织

学习一种编程语言时,常常优先关注在语言的语法和标准库上,希望能够尽快用上新语言来开发,我自己学习新的开发语言时也是这样。 不过,想用一种新的语言去开发实际的项目,或者自己做点小工具的话,除了语言本身之外,了解它在项目中如何组织代码也是至关重要的。毕竟在实际项…

springboot+vue前后端分离项目-项目搭建17-集成AOP系统日志

后端 1. 新增logs表和实体类,新增com/example/demo/mapper/LogsMapper.java,新增com/example/demo/controller/LogsController.javapackage com.example.demo.controller;import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi…

8.2日CSP-J初赛内容总结

8.2日CSP-J初赛内容总结Adobe:PS,PR,......Reader 微软:Onedrive(存文件),Excel(表格),Word(文字编辑),Onenote(笔记),PowerPoint(PPT)位号从正数部分最低位开始编号,0到更大的数字。 位号从左往右的小数部分从 \(-1\) 开始编号,编号变小基数:进制的进位数字 位权:基数的…

8.3日CSP-J初赛内容总结

8.3日CSP-J初赛内容总结 优先级 \(括号>非>与>或\) \(括号>逻辑运算>位运算\) \(括号>按位取反>按位与>按位或=按位异或\) 按位与或非 \(\to\) 补码按位取反补码所有位取反 按位与将 \(2\) 个补码对其地位 逐位比较1的个数基本上等于 \(n\) 除 \(2\) 的…

初学java4

这周我重新下载了jdk-17并更改了路径,目的是为了添加新的环境变量用于使用eclipse。 eclipse for java作为老牌java编程所需的软件,很值得我学习使用,不过下载以及环境变量的准备有些麻烦。 下载成功后使用起来就很方便了。

问题:ModuleNotFoundError: No module named pydotplus

无法找到pydotplus模块在 Anaconda propmt中安装:pip install pydotplus