在 Nifi ExecuteScript 中导入模块
Import Modules in Nifi ExecuteScript
我是 Nifi 的新手 python
我想执行我的 python 脚本。所以使用 ExecuteScript 并尝试导入某些模块。我是这样导入的:
import json, sftp, paramiko
虽然我安装了 sftp,但当我在 Executescript 中导入它时,它显示 "Failed to process session. No module named sftp at line number 1"
which -a sftp
/usr/bin/sftp
同样导入paramiko时,出现同样的错误。
ExecuteScript和InvokeScriptedProcessor使用的"python"引擎实际上是Jython,而不是纯粹的Python。这意味着它无法加载本机模块(.so 文件、已编译的 C 文件等)。根据 this SO post, paramiko uses Crypto which has native libraries, so cannot be used in Jython (see the bottom of this post 我对此的评论)。我的猜测是 sftp 库做同样的事情。
Jython 可以使用纯 Python 模块,a discussion on the NiFi mailing list 关于如何指向(和包含)这些类型的模块。
ExecuteScript 处理器使用它自己的 Jython 引擎来执行您的 python 脚本。由于您正在导入的库在 NIFI inbuild Jython Engine 中不可用,因此会出现抛出错误。
解决方案:
如果 python 已经在我们的机器上安装了所有这些库(安装 NIFI 的同一台机器),您可以使用该 python 引擎来执行脚本。您可以使用 ExecuteProcess 处理器执行 python 代码。 see the configuration of ExecuteProcess.
如果您使用 python 真的很重要。您可以使用 ExecuteStreamCommand。它将使用安装在您机器上的 python 引擎 运行 python 代码。
缺点是您无法在 python 代码中访问流文件的属性。只有它的内容。
要访问内容,
import sys
data = sys.stdin.readlines()
并将内容传递给下一个处理器,只需打印您的输出即可。
print("THIS IS MY OUTPUT, IT WILL BE PASSED AS CONTENT TO THE NEXT PROCESSOR")
否则,如果您需要坚持使用 ExecuteScript,请使用 groovy,这会让您省去很多麻烦。
我是 Nifi 的新手 python
我想执行我的 python 脚本。所以使用 ExecuteScript 并尝试导入某些模块。我是这样导入的:
import json, sftp, paramiko
虽然我安装了 sftp,但当我在 Executescript 中导入它时,它显示 "Failed to process session. No module named sftp at line number 1"
which -a sftp
/usr/bin/sftp
同样导入paramiko时,出现同样的错误。
ExecuteScript和InvokeScriptedProcessor使用的"python"引擎实际上是Jython,而不是纯粹的Python。这意味着它无法加载本机模块(.so 文件、已编译的 C 文件等)。根据 this SO post, paramiko uses Crypto which has native libraries, so cannot be used in Jython (see the bottom of this post 我对此的评论)。我的猜测是 sftp 库做同样的事情。
Jython 可以使用纯 Python 模块,a discussion on the NiFi mailing list 关于如何指向(和包含)这些类型的模块。
ExecuteScript 处理器使用它自己的 Jython 引擎来执行您的 python 脚本。由于您正在导入的库在 NIFI inbuild Jython Engine 中不可用,因此会出现抛出错误。
解决方案:
如果 python 已经在我们的机器上安装了所有这些库(安装 NIFI 的同一台机器),您可以使用该 python 引擎来执行脚本。您可以使用 ExecuteProcess 处理器执行 python 代码。 see the configuration of ExecuteProcess.
如果您使用 python 真的很重要。您可以使用 ExecuteStreamCommand。它将使用安装在您机器上的 python 引擎 运行 python 代码。
缺点是您无法在 python 代码中访问流文件的属性。只有它的内容。
要访问内容,
import sys
data = sys.stdin.readlines()
并将内容传递给下一个处理器,只需打印您的输出即可。
print("THIS IS MY OUTPUT, IT WILL BE PASSED AS CONTENT TO THE NEXT PROCESSOR")
否则,如果您需要坚持使用 ExecuteScript,请使用 groovy,这会让您省去很多麻烦。