需求
项目需求:由于Python没有提供Http请求的接口,而是以脚本的方式调用,Java需要调用pyhon脚本得到结果返回写入文件,然后Java再读取写入的文件,拿到结果页面展示。
坑:这种方式适合单线程模式,不是个多个请求并发,写入的文件是固定的,并发情况下,第一的请求如果读取的是第二次请求的结果,就会有问题。
脚本示例
Java代码不是直接调用python脚本,而是先调用shell脚本,shell脚本再调用python脚本,Java如果直接调用python会出一些问题。
#!/bin/bash
python xx/xx/xx/xx.py -a $1 -b $2 -c $3
执行代码封装工具类
这里参数的传递必须使用String数组的形式进行传递,如果直接传递下面的命令会造成有的脚本好用,有的出错。
bashCommand示例(参数用空格间隔):
sh xx/xx/xx/xx.sh "a1" "a2" "a3"
public class ExecUtil {
/**
* 执行Shell脚本 0成功 1失败
*/
public static int execSh(String bashCommand) throws IOException, InterrruptedException {
Runtime runtime = Runtime.getRuntime();
String[] bash = {"/bin/bash", "-c", bashCommand};
Process exec = runtime.exec(bash);
int status = exec.waitFor();
if(status != 0) {
return 1;
}
return status;
}
}
最后
不是特殊情况,不推荐Java这样调用Python,最好还是能提供一个Http接口进行调用。