如何在 Nifi 的虚拟环境中运行具有依赖关系的 python 脚本?
Posted
技术标签:
【中文标题】如何在 Nifi 的虚拟环境中运行具有依赖关系的 python 脚本?【英文标题】:How to run a python script with dependencies in a virtual environment in Nifi? 【发布时间】:2020-08-04 22:34:32 【问题描述】:在 Nifi 中有没有办法运行一个 python 脚本,该脚本具有从不同文件夹导入的模块、在 pipfile 中指定的要求并有要传递的参数?
简而言之,如何使用 Nifi 执行通常在我的虚拟环境中运行的 python 脚本?
我的最终目标是使用 Get File 获取文件并将其发布到 API。我试过执行进程,执行流命令处理器。
【问题讨论】:
我不确定我是否理解了这个问题——NiFi 能够获取文件、读取内容并将内容本地发布到 API。为什么这项任务需要 Python? 您在寻找 executeScript 处理器吗? nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/… 嗨@Andy,是的,但我在拿起一个文件后还有一堆处理,目前它在python中.. 【参考方案1】:要使用 Python 对流文件执行后续处理,您可以使用 ExecuteStreamCommand
或 ExecuteScript
/InvokeScriptedProcessor
处理器。
ExecuteStreamCommand
处理器将运行外部 shell 命令,例如 python3 my_python_script.py -arg1 string -arg2 213
,它可以包装自定义 Python 代码并使用 STDIN
传递现有流文件内容,并使用 STDOUT
捕获新的流文件内容。填充处理器的 Command Arguments 和 Command Path 属性以找到您的 python
可执行文件并提供 CLI 参数,包括通过 NiFi 表达式语言的流文件属性。有关示例,请参阅this answer。
ExecuteScript
处理器在与 NiFi 相同的 JVM 中运行 Jython 代码(Python 但无法访问本机库,仅兼容 Python 2.7,以及由于 JSR-223 导致的一些其他限制)。您可以直接使用 Python 代码处理流文件属性和内容。有关详细信息,请参阅 this answer 或 this answer。
【讨论】:
以上是关于如何在 Nifi 的虚拟环境中运行具有依赖关系的 python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章