Да, вы можете сделать это, записав файл потока в ваш 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