Java 执行 Python 脚本,脚本测试没问题,集成项目中,获取不到数据?

Java 执行 Python 脚本,脚本测试没问题,集成项目中,获取不到数据?

  1. 描述你的问题
    现在是有个需求就是针对上传的人脸图片去做人脸检测,人脸检测功能是通过java这边去调用python程序,看到普遍有两方式,第一种是:通过Jython.jar提供的类库实现 ,第二种方式是:通过Runtime.getRuntime()开启进程来执行脚本文件,现在采用的是第二种方式,测试的时候没问题,将其执行到项目中,通过 http 接口调用测试,立马返回数据,且为空的。

测试通过
服务器上,通过java测试单个class文件,正常返回数据(7s的时间,由于服务器性能比较差),集成在项目中,通过post 测试,立马返回数据,且数据为空,后面尝试设置当前线程 sleep 10s,还是空数据

root@smartconstruction:/zzt/face-detect# java PyExecuteCmd

main stringbuilder [18.621605661813042, 1]

public class PyExecuteCmd {

private static final String cmd = "python3 /zzt/face-detect/picdim.py ";

public static void main(String[] args) {

File file = new File("/zzt/face-detect/156654987537916313.jpg");

String[] ret = execute(file, 12312412L);

System.out.println(Thread.currentThread().getName() + " stringbuilder " + Arrays.toString(ret));

}

/**

* Get PictureQuality HumanNum for example 12.944183177157162 1

*

* @param file

* @param fileNameCrc

* @return 12.944183177157162 1

*/

public static String[] execute(File file, Long fileNameCrc) {

if (Objects.isNull(file)) {

return null;

}

String absolutePath = file.getAbsolutePath();

String command = cmd + absolutePath;

Process proc;

try {

proc = Runtime.getRuntime().exec(command);

BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));

String line = null;

StringBuilder stringBuilder = new StringBuilder();

while ((line = in.readLine()) != null) {

stringBuilder.append(line).append(" ");

}

in.close();

proc.destroy();

String[] resultArr = stringBuilder.toString().split(" ");

return resultArr;

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

}


回答:

貌似是 python 程序执行时间过长的原因,python 执行 7s才能返回数据,后台程序并没有等待,直接返回

以上是 Java 执行 Python 脚本,脚本测试没问题,集成项目中,获取不到数据? 的全部内容, 来源链接: utcz.com/a/167567.html

回到顶部