2 votes

Nifi : Comment passer la sortie Python de ExecuteScript au corps de PutEmail sans écrire dans un fichier

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.

1voto

artworkad シ Points 15473

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 :

enter image description here

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X