当前位置: 首页 > 面试题库 >

使用ExecuteStreamCommand的Python脚本

慎芷阳
2023-03-14
问题内容

在尽力找到先前的问题和与该问题相关的示例之后,仍然找不到所需的答案,我想到自己会提交一个问题。

由于以下原因,ExecuteStreamCommand对我而言似乎是理想的处理器:

  • 我能够执行任何Python脚本并避免使用Jython(以与ExecuteScript类似的方式)。Jython不是我的选择。
  • 我可以接受FlowFiles。这是必要的,因为使我的脚本消耗了前一个处理器的输出。此外,我喜欢将数据保存在“ NiFi管理”下的想法。
  • 它写入一个“执行状态”,这对于路由很有用。

简而言之,我要对ExecuteStreamCommand进行的操作是:

  • 摄取前一个处理器的输出(一个Scrapy Spider,它输出带有JSON行的文本文件)
  • 调用python脚本(例如python3 my_script.py
  • 加载在我的python脚本中提取的FlowFile。
  • 选择FlowFile的内容。
  • 在python中操作FlowFile的内容。
  • 输出原始FlowFile的更新版本或创建一个新版本。
  • 使用更新的/新的FlowFile继续执行我的NiFi流。

为了清楚起见,我目前不了解:

  • 如何调用python脚本(从ExecuteStreamCommand处理器)
  • 如何从Python内加载FlowFile
  • 如何在Python中更新或创建新的FlowFile
  • 如何将更新的FlowFile从Python输出回NiFi。

我遇到了ExecuteScript的各种示例,但不幸的是,这些示例并未完全转换为ExecuteStreamCommand的使用。

先感谢您。任何建议表示赞赏。


问题答案:

根据您的问题,您说您需要在不使用InvokeScriptedProcessororExecuteScript处理器的情况下调用Python脚本,因为您无法使用Jython。鉴于此要求,您仍然应该能够实现目标。尽管需要一定程度地熟悉框架,但是所有这些信息都来自ExecuteStreamCommand文档。

您的“我目前不了解”部分:

  • 如何调用python脚本(从ExecuteStreamCommand处理器)

    • 在您的ExecuteStreamCommand处理器中,使用以下 命令 配置命令参数” 和“ 命令路径” 属性:

    • 命令参数:(any flags or args, delimited by ;/path/to/my_script.py

    • 命令路径: /path/to/python3
    • 如何从Python内加载FlowFile

    • 流文件的内容将通过 STDIN 传递,因此在您的Python脚本中,以与通常处理 STDIN 相同的方式处理该数据。

    • 如何在Python中更新或创建新的FlowFile
    • NiFi处理框架中的流文件创建。您的Python脚本传递给 STDOUT的 所有数据都将填充到传递给处理器的 输出流 关系的 结果流文件 的内容中ExecuteStreamCommand。在这种情况下,您的脚本不需要了解“流文件”。如果您改为使用ISPES处理器,则可以使用NiFi脚本API,该API将自动注入脚本中以创建或更新flowfile对象。
    • 如何将更新的FlowFile从Python输出回NiFi。
    • 同样,只需从脚本中将所需的流文件内容写入 STDOUT ,并且(返回状态代码为0)NiFi就会使用该内容生成一个新的流文件。如果将“ 输出目标属性” 属性设置ESC为非空值,NiFi将改为使用包含脚本输出的同名新属性来更新现有流文件。


 类似资料:
  • 问题内容: 任何人都可以帮助我如何编写一个python脚本来搜索google并显示最佳结果的链接。 问题答案: 也许是这样的? 阅读文档http://docs.python.org/ [编辑]由于AJAX API已失效,因此您可以使用第三方服务,例如SerpApi,它们确实提供了Python库。

  • 问题内容: 我目前有一个MVC项目,可以通过Process调用python脚本(新的processStartinfo(“ / path / to / python.exe”,“ /path/to/script.py”)。在Visual Studio中运行良好。当我发布此文件时在azure上将如何调用python.exe?(我可能无法正确构建此问题,因为这是我第一个要发布的网站,并且对发布没有完全的

  • 问题内容: 每次执行脚本时,我都试图编写一个小的脚本来挂载VirtualBox共享文件夹。我想用Python来做,因为我正在尝试学习它的脚本。 问题是我需要特权才能启动安装命令。我可以将脚本作为sudo运行,但是我更喜欢它自己制作sudo。 我已经知道将密码写入.py文件并不安全,但是我们谈论的是根本不重要的虚拟机:我只想单击.py脚本并使它工作。 这是我的尝试: 我的python版本是2.6 问

  • 问题内容: 我想从Python脚本激活实例。 我知道这很容易做到,但是我看过的所有示例都使用它在env中运行命令,然后关闭子进程。 我只是想激活并返回外壳,就像一样。 像这样: 这可能吗? 问题答案: 如果要在下运行Python子进程,可以通过使用位于的目录中的Python解释器运行脚本来实现: 但是,如果要在当前的Python解释器下而不是子进程下激活,则可以使用以下脚本:

  • 问题内容: 我正在研究一个散布一堆jython和Java代码的应用程序。由于程序的性质(使用wsadmin),我们实际上仅限于Python 2.1 当前,我们有一个同时包含Java源代码和.py模块的jar。该代码当前是使用java调用的,但我希望删除此代码,以便将尽可能多的功能迁移到jython。 我的问题是我想从调用的jython脚本中导入或执行现有jar文件中的python模块。我尝试了几种

  • 背景资料 我有一个名为的Python 3脚本,它使用内置的模块。该脚本可归结为以下内容: 根据用于请求的URI,通过动态导入模块来处理GET和POST请求。 上面的工作正常,但是,在创建脚本之后,需要能够远程更新脚本的整个“包”(即服务器脚本,加上所有“动态加载”的“模块脚本””并位于子文件夹中)。 为此,我在Python 3中编写了另一个服务器脚本(称为),当被指示时,它将检索一个zip文件,然