Java对于简单python脚本还可以识别运行,但是一旦脚本有import第三方库,Java运行报错no module named 第三方库名 ,已经将第三方库放置到java同级目录下面了,请问还有哪里出问题了,把代码也贴上好了
package com.python.test; import java.util.Properties; import org.python.core.PyFunction; import org.python.core.PyObject; import org.python.core.PyString; import org.python.util.PythonInterpreter; public class Test { /** * @param args */ public static void main(String[] args) { Properties props = new Properties(); props.put("python.console.encoding", "UTF-8"); // Used to prevent: console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0. props.put("python.security.respectJavaAccessibility", "false"); //don't respect java accessibility, so that we can access protected members on subclasses props.put("python.import.site","false"); Properties preprops = System.getProperties(); PythonInterpreter.initialize(preprops, props, new String[0]); PythonInterpreter interp = new PythonInterpreter(); interp.exec("import sys"); interp.exec("sys.path.append('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\Lib')");//jython自己的 interp.exec("sys.path.append('C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\Lib\\site-packages')");//jython自己的 interp.exec("sys.path.append('D:\\pyworkpeace\\train.py')");//我们自己写的 PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("D:\\pyworkpeace\\train.py"); PyFunction func = (PyFunction)interpreter.get("login",PyFunction.class); String url = "https://www.tianyancha.com/login"; String username = "15160773967"; String password = "yy171827"; PyObject pyobj = func.__call__(new PyString(url), new PyString(username),new PyString(password)); // } } }
自己试出来了
package test; import java.io.BufferedReader; import java.io.InputStreamReader; public class MyDemo { public static void main(String[] args) { try { System.out.println("start"); String[] args1=new String[]{"python","D:\\pyworkpeace\\9_30_1.py"}; Process pr=Runtime.getRuntime().exec(args1); BufferedReader in = new BufferedReader(new InputStreamReader( pr.getInputStream())); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); pr.waitFor(); System.out.println("end"); } catch (Exception e) { e.printStackTrace(); }} public void test(){ System.out.println("我的第一个方法C"); } }
调用的是D盘下的9_30_1.py文件,得到的结果如下:
start
[ 1. 1. 1.]
java 调用有第三方库的python脚本成功
end
python文件的内容:
import numpy as np if __name__ == '__main__': a = np.ones(3) print(a) print('java 调用有第三方库的python脚本成功')
你好,我复制出来你的代码,无法解决numpy问题。
环境jdk1.7
anconda3
jython2.7
最快捷的方式是:
写个.bat的运行脚本可以运行py文件
然后java中使用http://mvnrepository.com/artifact/org.zeroturnaround/zt-exec 这个启动bat脚本,参数可以传递
省去调试python依赖的环境变量内容
你好,我将bat文件发在和python脚本同一个目录下,bat文件内容如下 python ..\py_file.py,我的是windows系统,python后面没有加-i,但是我双击bat文件,输出框闪退,我根本不知道bat脚本是否正常调用了py文件?该怎么看呢
@bethansy: 使用dos命令行进入运行看看
键盘WIN+R 输入 cmd 即可进入dos
为什么 我copy你的代码 不能运行啊