Apache Nifi:使用GetFile将文件传递到ExecuteProcess

sum*_*ght 3 apache-nifi

我有一个python脚本,它接受命令行参数来解密文件.要执行的python命令如下所示:

python decrypt.py -f "file_to_decrypt.enc" -k "private_key_file.txt"

我正在尝试使用GetFile处理器来挑选这些文件,NiFi因为我可以在日志中看到文件名.

另一方面,我有一个ExecuteProcess进程设置来运行如上所述的python脚本.但是,我需要将文件名传递ExecuteProcess给Python脚本才能工作.所以我的问题是,我怎么管这些文件从GetFile过程到ExecuteProcess processApache NiFi

And*_*ndy 7

您可以使用ExecuteStreamCommand处理器代替ExecuteProcess.该处理器接受传入的flowfile并且可以访问属性和内容,而ExecuteProcess是一个处理器,并且不接受传入flowfiles.

我不知道你是否需要GetFile(获取文件的内容); 试着ListFileRouteOnAttribute你想要的两个文件名进行筛选.将两个成功的列表合并到一个流文件中MergeContent,然后使用${filename}属性和表达式语言用和填充命令参数.x.ency.txt

更新

我构建了一个执行以下任务的模板:

  1. 生成示例密钥文件(不是有效密钥)
  2. 生成示例加密数据文件(不是有效的密文)
  3. 使用ListFile,UpdateAttribute,RouteOnAttribute,MergeContent,和ExecuteStreamCommand执行的命令行Python解密(由嘲笑echo)

注意,这使用了一种表达语言功能,该功能ifElse()目前在NiFi中,master但尚未发布.它是1.2.0版本的一部分,但如果你构建master,你现在可以使用它.

NiFi ExecuteStreamCommand模板

我仍然认为EncryptContent或特别ExecuteScript是更紧凑,但这是有效的.