如何在Python中使用NiFi ExecuteScript处理器?

如何在Python中使用NiFi ExecuteScript处理器?,python,etl,apache-nifi,Python,Etl,Apache Nifi,我在ApacheNIFI中使用一个简单的Python脚本(保存为.py文件)对ExecuteScript处理器进行了非常基本的设置,如下所示。在处理器的属性中,我将脚本引擎设置为python,并将脚本文件设置为该脚本的路径 import time count = 0 while(count < 20): print "The counter says: ", count count = count + 1 time.sleep(.1) 导入时间 计数=0 而(

我在ApacheNIFI中使用一个简单的Python脚本(保存为.py文件)对ExecuteScript处理器进行了非常基本的设置,如下所示。在处理器的属性中,我将脚本引擎设置为python,并将脚本文件设置为该脚本的路径

import time

count = 0

while(count < 20):
    print "The counter says: ", count
    count = count + 1
    time.sleep(.1)
导入时间
计数=0
而(计数<20):
打印“计数器显示:”,计数
计数=计数+1
时间。睡眠(.1)
这是我制作的数据流图:


我没有看到任何输出到日志或文件的内容。但是,我确实看到print语句出现在\nifi-0.6.1\logs\nifi-bootstrap.log中。我对这方面的了解目前有限。如果有人知道如何使用ExecuteScript处理器,或者给我一个比当前设置更好的示例,我将不胜感激。

鉴于您的脚本,我认为一切都按预期运行。脚本没有生成任何流文件,这就是为什么没有任何内容从ExecuteScript移动到其他处理器,发送到system out的任何内容都会被捕获到bootstrap.log中,这就是为什么print语句会在那里结束

在ExecuteScript中使用执行的脚本可以访问几个标准对象:

  • 会议
  • 上下文
  • 日志
  • 关系失效
  • 关系成功
为了生成流文件,您需要调用session.create()并获取生成的流文件并将其传输到REL_SUCCESS

关于脚本处理器的最佳信息来源是Matt Burgess的博客,该页面有一些良好的背景(使用Groovy):

这是一个Jython的例子:


我想知道您是否尝试过ExecuteProcess。它应该抓取标准输出并将其作为流文件发送:不确定“获取”标准对象是什么意思。这是否意味着不需要在.py文件中使用任何特殊的
import
语句来引用它们?这正是他的意思,它们是全局变量,因此您的脚本可以访问它们,而无需在其他地方定义它们。我们不能使用pandas或任何其他库:(