【问题标题】:Java process.getRuntime().exec() never stop his jobJava process.getRuntime().exec() 永远不会停止他的工作
【发布时间】: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:

  1. 读取文件并保存问题,将照片放在变量中
  2. 分析所有照片
  3. 将所有这些信息写入 pdf 文件
  4. 将 pdf 保存到数据库中

编辑:java 进入脚本但没有完成所有工作。

【问题讨论】:

  • 通常尽量不要使用 Process.exec 来配对程序控制流。如果您必须在另一个技术平台上执行相关的业务功能。使用由 Web 服务使用的事件。这样你就可以扩展了。
  • @AG 我别无选择,我必须以这种方式进行,我不能浪费太多时间,我不知道如何使用网络服务,我必须先学习它,然后再尝试。
  • ..never stop his job 是什么意思? Java System.out.println("...") 是什么,还是“挂起”?
  • @Wulf 对于 7 个问题,System.out.println("...") 有效,它打印所有 python 脚本打印(我使用 print 进行调试,java 打印所有 python 打印,抱歉这个不好的概念)。对于8个问题什么都不打印,网页处于空闲状态,等待一些东西,我想等待python(java进入脚本,脚本将图像写入目录,仅此而已,java中的sout命令什么都不打印)。

标签: java python process


【解决方案1】:

如果您的 python 以与 8 个问题相同的方式为 7 工作,您可以尝试读取其他 Thread 中的输入流。

喜欢:

   ...
    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();

【讨论】:

  • 我试过了,但是 Runnable() 要求我实现 run() 方法。我在这里遇到语法错误:“})。”
  • 0 次打印,但不会保持空闲状态,显然脚本不会执行所有作业
  • 我添加了一些关于脚本作业的内容,他所做的只是第 1 点,然后挂起
  • @GabrielePisapia 你应该更多地调试你的脚本。在你的脚本中创建一个日志文件。
  • 我认为问题不在于python,而是java中的进程pheraps python脚本在内存方面需要太多资源,而java无法提供python需要的所有资源。有可能吗?
猜你喜欢
  • 2015-12-06
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多