Je suis très nouveau sur Nifi et je me demandais si je pouvais passer la sortie de Python (stdout, pandas df, markdown) depuis ExecuteScript sans écrire la sortie dans un fichier afin d'envoyer un email avec PutEmail comme partie du corps de l'email. Merci d'avance.
Réponse
Trop de publicités?Oui, vous pouvez le faire en écrivant dans le fichier de flux de votre ExecuteScript
. Par exemple :
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
Je l'ai testé avec le débit suivant :
J'ai mis GenerateFlowFile
Texte personnalisé à Foo laissons ExecuteScript
ajouter Bar et écrire le résultat dans le fichier de flux. La même chose s'applique à votre cas d'utilisation. Laissez simplement votre script écrire le contenu dans le flowfile. PutEmail
prendra ce contenu et l'enverra par e-mail.
Apprenez à maîtriser ExecuteScript : https://community.cloudera.com/t5/Community-Articles/ExecuteScript-Cookbook-part-1/ta-p/248922