Java 执行 Python 脚本,脚本测试没问题,集成项目中,获取不到数据?
- 描述你的问题
现在是有个需求就是针对上传的人脸图片去做人脸检测,人脸检测功能是通过java这边去调用python程序,看到普遍有两方式,第一种是:通过Jython.jar提供的类库实现 ,第二种方式是:通过Runtime.getRuntime()开启进程来执行脚本文件,现在采用的是第二种方式,测试的时候没问题,将其执行到项目中,通过 http 接口调用测试,立马返回数据,且为空的。
测试通过
服务器上,通过java测试单个class文件,正常返回数据(7s的时间,由于服务器性能比较差),集成在项目中,通过post 测试,立马返回数据,且数据为空,后面尝试设置当前线程 sleep 10s,还是空数据
root@smartconstruction:/zzt/face-detect# java PyExecuteCmdmain 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