eclipse中调用使用第三方包的Python代码

关于java调用Python代码,试过Jython(因为创建的是maven项目,所以选择直接在pom文件中添加依赖),但是对于我调用了很多第三方包的Python程序,这样会报找不到第三方包的情况;然后我就选择直接在eclipse中直接配置Python环境,在eclipse中安装了新的软件PyDev,我的Python程序可以在eclipse中运行,但是我不知道如何在Java项目中获取Python代码输出情况……所以最后我选择了创建Java项目,在Java文件中使用Runtime调用Python程序,以下是我踩过很多坑成功运行并获得输出后的总结:

  1. 将安装的Python地址添加到环境变量中,例如我的是D:\Program Files (x86)\Python_space。可以试试在cmd中能否运行本地Python代码,例如输入指令python D:\\complexNet\\walker.py,在cmd中可以运行成功后,才可能在Java项目中调用成功并获得输出。
  2. 在使用Runtime调用时,指定本地配置好的Python运行环境,不然可能会因为缺失第三方包而无法运行。
String[] args1 = new String[] {"D:\\Program Files (x86)\\Python_space\\python", "D:\\complexNet\\walker.py"};
proc = Runtime.getRuntime().exec(args1);
  1. 可能由于编码问题导致Python代码在Java中无法调用,Python代码中最好不要有中文,可以加上以下代码(是否有用并没有测试)。
  2. python代码中需读取的文件采用绝对地址。
#coding='utf-8'
#!usr/bin/python
import sys
import importlib
importlib.reload(sys)

我的调用代码如下:


import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * Run Python
 *
 */
public class App {
	
    public static void main( String[] args ){
        Process proc;
        try {
        	 System.out.println("start____________________________");
        	 String[] args1 = new String[] {"D:\\Program Files (x86)\\Python_space\\python", "D:\\complexNet\\walker.py"};
        	 proc = Runtime.getRuntime().exec(args1);
             //用输入输出流来截取结果
             BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
             String line = null;
             while ((line = in.readLine()) != null) {
                 System.out.println(line);
                 
             }
             System.out.println("end_________________________________");
             in.close();
             proc.waitFor();
        }catch (IOException e) {
			// TODO: handle exception
        	e.printStackTrace();
		}catch (InterruptedException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
    }
}

其中,Python代码调用第三方包情况如下:

import random
import time
import sys
import importlib
importlib.reload(sys)

from tqdm import tqdm
import networkx as nx
import pandas as pd
from itertools import product
from collections import defaultdict
from multiprocessing import Pool
from functools import partial
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值