从Java调用Python脚本。我应该使用Docker吗?

时间:2018-05-05 16:40:28

标签: java python docker

我们的项目中有一个Java应用程序,我们想要的是调用一些Python脚本并从中返回结果。这样做的最佳方式是什么?

我们希望隔离Python执行以避免影响Java应用程序。 Dockerizing Python可能是最好的解决方案。我不知道其他任何方式。

然后,问题是如何从Java调用它。

据我了解,有几种方法:

  1. 在Docker中启动一些Web服务器,它接受来自Java App的REST调用并运行Python脚本并通过REST将结果返回给Java。

  2. 以某种方式通过Docker CLI处理请求和响应。

  3. 使用Java Docker API向Docker发送REST请求,然后由Docker将其转换为Docker中的Python脚本的Stdin / Stdout。

  4. 在Docker中运行的Java App与Python连接的最有效和最正确的方法是什么?

2 个答案:

答案 0 :(得分:2)

你不需要泊坞号。有几个选项,您应该根据Java应用程序的功能进行选择。

  1. 如果Java应用程序是客户端 - 基于swing,weblaunch或直接提供UI - 您将需要将python功能转换为REST / HTTP调用。

  2. 如果Java应用程序是 server / webapp - 在Tomcat,JBoss或其他应用程序容器中执行 - 您只需将python脚本包装在exec调用中。请参阅Java Runtime和ProcessBuilder API以实现此目的。

答案 1 :(得分:1)

您可以尝试§14.20将您的python脚本停靠在顶部的网络服务器上。

您可以使用完整的OpenFaas堆栈创建映射到单个容器的单个API函数,或者只能使用OpenFaas Web组件。

一个简单的private fun restoreBackup(){ val deviceService = DeviceService(context); val aMDetail=DetailsHandler().getDetail(mListBackupItem[index]._id) deviceService.updateBluetooth(aMDetail.getDeviceDefinition<BluetoothDef>()); deviceService.updateWifi(aMDetail.getDeviceDefinition<WifiDef>()) } 可能是这样的:

Dockerfile

构建并运行它:

FROM python:3.4-alpine

ADD . /workdir
WORKDIR /workdir

ADD https://github.com/openfaas/faas/releases/download/0.7.9/fwatchdog /usr/bin
RUN chmod +x /usr/bin/fwatchdog

ENV fprocess="python yourPythonScript.py"
CMD ["fwatchdog"]

您已准备好通过带有明文参数的http与您的脚本“交谈”:

$ docker build . -t dockerized-python-script
[....]
$ docker run -p 8080:8080 dockerized-python-script

如果您想谈JSON,则需要相应地修改$ curl yourserver:8080 -d "param1 param2 param3" Some output from your script 以管理输入和输出。