Java process.getRuntime().exec()从不停止他的工作
大家好,我正在用java编写一个带有servlet的web应用程序,但是我需要一个使用python的作业,所以我使用Process.getRuntime().exec()调用脚本。 我的web应用程序是一个调查,在客户编译它的过程中,我们给他拍了一张照片。 我需要python用于deepface,用于检测他的情绪,并将所有结果写入pdf文件(他选择的内容、照片和情绪检测结果)。 对于调查中的7个问题,脚本运行良好,当我提出8个问题时,他从不停止工作(脚本在不是从java调用时工作,我测试了它)。 你能帮我理解我是如何发现错误的吗?这个过程有资源的限制还是类似的Java process.getRuntime().exec()从不停止他的工作,java,python,process,Java,Python,Process,大家好,我正在用java编写一个带有servlet的web应用程序,但是我需要一个使用python的作业,所以我使用Process.getRuntime().exec()调用脚本。 我的web应用程序是一个调查,在客户编译它的过程中,我们给他拍了一张照片。 我需要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脚本:
编辑:java进入脚本,但不完成所有工作。如果您的python以与8问题相同的方式处理7,您可以尝试在其他
线程中读取输入流
比如:
通常不要使用Process.exec对程序控制流进行配对。如果您必须在另一个技术平台上执行相关业务功能。使用Web服务使用的事件。这样你就可以扩展。@AG我别无选择,我必须这样做,我不能浪费太多的时间,我不知道如何使用Web服务,我必须在尝试之前先学习。你说的是什么意思。永远不要停止他的工作
?JavaSystem.out.println(“…”)是什么,还是“挂起”?@Wulf对于7个问题,System.out.println(“…”)工作,它打印python脚本的所有打印(我使用print进行调试,Java打印python的所有打印,很抱歉这个糟糕的概念)。对于8个问题,不打印任何内容,网页处于空闲状态,正在等待一些东西,我想等待python(java进入脚本,脚本在目录中写入图像,之后不打印任何内容,java中的sout命令不打印任何内容)。我试过了,但Runnable()要求我实现run()方法。我这里有一个语法错误:“}”。“0打印,但不要保持空闲状态,很明显脚本没有执行所有作业。我添加了一些关于脚本作业的内容,他所做的只是第1点,然后继续hang@GabrielePisapia您应该更多地调试脚本。在脚本中创建一个日志文件。我认为问题不在于python,而在于java中的过程。python脚本在内存方面需要太多的资源,java无法提供python所需的所有资源。有可能吗?
...
new Thread(new Runnable(){
@Override
public void run(){
BufferedReader stdInput = new BufferedReader(newInputStreamReader(p.getInputStream()));
String temp ="";
while((temp = stdInput.readLine()) != null) {
System.out.println(temp);
}}).start();