java利用截取控制台输出的方法调用python的坑

这里是java 利用Runtime.getRuntime().exec()调用python所遇见的问题

上代码:利用java的这部分代码去调用python代码

public List<String> recommend(String job_exp,String job_edu,String job_loc,String job_info) {
        try {
            String[] args = new String[] { "python", "C:\\xxx\\job_recommend\\src\\main\\web\\python\\w2v_recommedn.py", job_info, job_edu,job_exp,job_loc };
            Process proc = Runtime.getRuntime().exec(args);// 执行py文件
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK"));
            String line = null;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
                List<String> strsToList2=new ArrayList<>();
                Collections.addAll(strsToList2,line);
                System.out.println(strsToList2);
                return strsToList2;
            }
            in.close();
            proc.waitFor();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return null;
    }

python部分:w2v_recommedn.py

def final_return(user_input,edu,exp,loc):
    return_json={"name":"","des":"","symbolSize": 70,"category": 1,}
    final_list=[]
    r_list=recommend_list(user_input, edu, exp, loc)
    for i in r_list:
        return_json["name"]=i[0]
        des=str(i[1])+"<br>"+str(i[2])+"<br>"+str(i[3])
        # des_list=re.split(r"[0-9]\.|[0-9]、|[0-9][)]",i[4])
        jobinfo=""
        # if len(des_list)<1:#如果不能按照数字匹配,则按照字符串长度切割
        des_list=cut(i[4],40)
        for k in des_list:
            jobinfo = jobinfo + k + "<br>"
        # else:
        #     for j in des_list:
        #         jobinfo=jobinfo+j+"<br>"
        des=des+jobinfo
        # print(des_list)
        return_json["des"]=des
        final_list.append(return_json)
    java_list=""# 这么多一步是为了让python的列表    变成Java的列表
    for i in final_list:
        java_list=java_list+str(i)+','
    return  java_list
if __name__ == '__main__':
    job_info = sys.argv[1]
    job_edu = sys.argv[2]
    job_exp = sys.argv[3]
    job_loc = sys.argv[4]
    print(final_return(job_info,job_edu,job_exp,job_loc))

发现python的资源占用率在很高几秒之后迅速下降为0。
发现
原因:最终是因为被调用的python文件里的包会不断的在控制台输出警告日志。而java正是通过控制台截取输出从而获得python的数据,所以java截取部分警告日志后便不再调用python。

解决办法:修改python文件中引入包的logging输出,使其不在控制台输出即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值