首页 > 编程语言 >kettle从入门到精通 第八十三课 ETL之kettle kettle调用python且接收返回值

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

时间:2024-08-04 13:39:46浏览次数:8  
标签:__ return python 第八十三 kettle print main

场景: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且接收返回值,小伙伴们可以自己尝试下。

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

 

 

标签:__,return,python,第八十三,kettle,print,main
From: https://www.cnblogs.com/zjBoy/p/18338729

相关文章

  • Python | 函数式编程
    文章目录1函数式编程2lamda表达式(匿名函数)3偏函数4闭包和自由变量5内置函数5.1map()函数5.2reduce()函数5.3filter()函数5.4sorted函数1函数式编程函数式编程(functionalprogramming)其实是个很古老的概念,诞生距今快60年啦!最古老的函数式编程语言Lisp......
  • 3:python语法第二章:语法基础2(适合小白进行观看)
    目录:3.1条件控制语句3.1.1基本的if,else语句3.1.2if嵌套首先学习两个语句的话,最为重要的就是要搞清楚这个底层逻辑是啥,学会了底层的逻辑便很容易的写出代码。3.1条件控制语句3.1.1基本的if,else语句基本的if,else的代码,可以首先理解一些什么是if,在英文中if指的是如果,所以说......
  • 2:python第二章:python语法基础1(适合小白学习)
    目录2.1:变量2.1.1变量的赋值与更换变量的值2.1.2变量的名称2.1.3多个变量的赋值2.1.4变量的输出2.2:数据结构(基本数据结构)2.2.1字符串(string)2.2.1.1访问字符(索引)2.2.1.2切片2.2.2整数(integer)2.2.3浮点数(float)2.2.4复数(complexnumber)2.3:运算符 2.3.1基本的运算......
  • Python面试题:结合Python技术,如何使用NetworkX进行复杂网络建模与分析
    NetworkX是一个用于创建、操作和研究复杂网络(图)的Python库。它提供了丰富的工具来构建、操纵和分析各种类型的图。下面是一个基本的示例,演示如何使用NetworkX进行复杂网络建模与分析。安装NetworkX首先,确保你已经安装了NetworkX。可以使用以下命令进行安装:pipinstallne......
  • Python应用—简单邮件发送功能
    importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeader#使用正确的SMTP服务器地址和端口号#以163邮箱为例server=smtplib.SMTP_SSL('smtp.163.com',465)#使用SSL连接#登录邮箱server.login('自己账户','自己密码')#替换为......
  • Python爬虫技术 第32节 最佳实践和常见问题
    Python爬虫技术是一种用于从网站上自动抓取数据的技术。它涉及到网络请求、HTML解析、数据提取等多个环节。下面我将详细介绍Python爬虫的最佳实践以及一些常见的问题解决方法,包括日志记录和错误报告、爬虫维护和更新等方面。Python爬虫基础架构一个典型的Python爬虫程序......
  • 机器学习:Python还是R,哪个更好?
    在机器学习领域,选择合适的编程语言是成功的关键因素之一。Python和R是最受欢迎的两种编程语言,各自具有独特的优势和应用场景。本文将探讨Python和R在机器学习中的优缺点,帮助你决定哪种语言更适合你的需求。一、Python和R概述PythonPython是一种通用的编程语言,以其简洁的语法......
  • 初级python代码编程学习----简单计算器代码学习 入门必看
    简单计算器的代码今天来点最简单的python代码。让有兴趣的网友可以快速尝试入门。 defadd(x,y):returnx+ydefsubtract(x,y):returnx-ydefmultiply(x,y):returnx*ydefdivide(x,y):ify==0:return"Error!Divisionb......
  • Python | ValueError: invalid literal for int() with base 10: ‘example’
    Python|ValueError:invalidliteralforint()withbase10:‘example’在Python编程中,遇到ValueError:invalidliteralforint()withbase10:'example'这样的错误通常意味着你试图将一个字符串转换为整数,但该字符串包含非数字字符。这种错误常见于数据输入、文......
  • Python函数的异常
    #异常:是一个事件,这个时间在程序执行过程中发生,影响了程序的正常执行#异常处理最终目的:让程序在有异常时,仍能够正常运行#语法格式一:try:  print(a)  #可能够引发异常的现象的代码except:  #基类异常  print('出现错误')b=10print(b)#法二try: ......