【发布时间】:2020-09-10 08:28:41
【问题描述】:
大家好,我用 servlet 在 Java 中编写了一个 Web 应用程序,但我需要一份工作才能使用 python,所以我使用 Process.getRuntime().exec() 来调用脚本。 我的网络应用程序是一项调查,在客户编译它之间,我们给他拍了张照片。 我需要python进行deepface,用于检测他的情绪,并将所有结果写入pdf文件(他选择什么,照片和情绪检测结果)。 对于调查中的 7 个问题,脚本运行良好,当我提出 8 个问题时,他从不停止工作(脚本在没有从 java 调用时工作,我对其进行了测试)。 你能帮我理解我如何找到错误吗?这个进程有资源限制或类似的东西?
Process p = Runtime.getRuntime().exec("python "+rootPath+"\\DeepFaceLearning\\TestFace.py "+nomeFile);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
String temp ="";
while((temp = stdInput.readLine()) != null) {
System.out.println(temp);
}
对于 python,脚本很长,但我认为问题出在 java,因为当我从命令行运行 40 个问题的脚本时,他工作正常。 我总共需要添加 21 个问题。 脚本python:
- 读取文件并保存问题,将照片放在变量中
- 分析所有照片
- 将所有这些信息写入 pdf 文件
- 将 pdf 保存到数据库中
编辑:java 进入脚本但没有完成所有工作。
【问题讨论】:
-
通常尽量不要使用 Process.exec 来配对程序控制流。如果您必须在另一个技术平台上执行相关的业务功能。使用由 Web 服务使用的事件。这样你就可以扩展了。
-
@AG 我别无选择,我必须以这种方式进行,我不能浪费太多时间,我不知道如何使用网络服务,我必须先学习它,然后再尝试。
-
..never stop his job是什么意思? JavaSystem.out.println("...")是什么,还是“挂起”? -
@Wulf 对于 7 个问题,System.out.println("...") 有效,它打印所有 python 脚本打印(我使用 print 进行调试,java 打印所有 python 打印,抱歉这个不好的概念)。对于8个问题什么都不打印,网页处于空闲状态,等待一些东西,我想等待python(java进入脚本,脚本将图像写入目录,仅此而已,java中的sout命令什么都不打印)。