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
我是 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