Nifi:如何在不写入文件的情况下将 Python 的输出从 ExecuteScript 传递到 PutEmail 正文

Nifi: How to pass Python's output from ExecuteScript to PutEmail body without writing to a file

我是 Nifi 的新手,我想知道我是否可以从 ExecuteScript 传递 Python 的输出(stdout,pandas df,markdown)而不将输出写入文件为了发送带有 PutEmail 的电子邮件作为电子邮件正文的一部分。先感谢您。

是的,您可以通过写入 ExecuteScript 中的流文件来做到这一点。例如:

from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback

# Define a subclass of StreamCallback for use in session.write()
class PyStreamCallback(StreamCallback):
    def __init__(self):
        pass
    def process(self, inputStream, outputStream):
      # Write to flowfile
      out = IOUtils.toString(inputStream, StandardCharsets.UTF_8) + ' Bar'
      outputStream.write(bytearray(out.encode('utf-8')))
# end class

flowFile = session.get()
if(flowFile != None):
    try:
        flowFile = session.write(flowFile, PyStreamCallback())
        # Last operation is transfer to success (failures handled in the catch block)
        session.transfer(flowFile, REL_SUCCESS)
    except Exception as e:
        log.error(repr(e))
        session.transfer(flowFile, REL_FAILURE)
# implicit return at the end

我使用以下流程对其进行了测试:

我将GenerateFlowFile自定义文本设置为Foo,让ExecuteScript添加Bar并写入结果到流文件。同样适用于您的用例。只需让您的脚本将内容写入流文件即可。 PutEmail 将获取此内容并通过电子邮件发送。

了解如何掌握 ExecuteScript:https://community.cloudera.com/t5/Community-Articles/ExecuteScript-Cookbook-part-1/ta-p/248922