我们的项目中有一个Java应用程序,我们想要的是调用一些Python脚本并从中返回结果。这样做的最佳方式是什么?
我们希望隔离Python执行以避免影响Java应用程序。 Dockerizing Python可能是最好的解决方案。我不知道其他任何方式。
然后,问题是如何从Java调用它。
据我了解,有几种方法:
在Docker中启动一些Web服务器,它接受来自Java App的REST调用并运行Python脚本并通过REST将结果返回给Java。
以某种方式通过Docker CLI处理请求和响应。
使用Java Docker API向Docker发送REST请求,然后由Docker将其转换为Docker中的Python脚本的Stdin / Stdout。
在Docker中运行的Java App与Python连接的最有效和最正确的方法是什么?
答案 0 :(得分:2)
你不需要泊坞号。有几个选项,您应该根据Java应用程序的功能进行选择。
如果Java应用程序是客户端 - 基于swing,weblaunch或直接提供UI - 您将需要将python功能转换为REST / HTTP调用。
如果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
以管理输入和输出。