public class FirstJavaScript{
public static void main(String args[]) {
// Properties props = new Properties();
// props.put("python.import.site", "false");
// Properties preprops = System.getProperties();
// PythonInterpreter.initialize(preprops, props, new String[0]);
// PythonInterpreter interpreter = new PythonInterpreter();
// interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");
//interpreter.exec("print days[1];");
// interpreter.exec("print('hello')");
try {
System.out.println("start");
String[] args1=new String[]{"D:python.py","D:python.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");
}
}
import numpy as np
if __name__ == '__main__':
a = np.ones(3)
print(a)
print('java 调用有第三方库的python脚本成功')
报错:
start
Disconnected from the target VM, address: '127.0.0.1:51405', transport: 'socket'
java.io.IOException: Cannot run program "D:python.py": CreateProcess error=193, %1 不是有效的 Win32 应用程序。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:485)
at com.wd.emrsearch.python.FirstJavaScript.main(FirstJavaScript.java:27)
Caused by: java.io.IOException: CreateProcess error=193, %1 不是有效的 Win32 应用程序。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 3 more
求大神指点
你想调用python的依赖库,说白了是不是想用他依赖库中的方法进行一些数据处理或者其他操作?若果是的话你可先在python脚本中实现,然后java直接去调用这个脚本就可以了
如果在python里面导入第三方依赖的话用java去掉这个脚本。就找不到这个依赖
@我需要学习: java>python>python依赖库
不能直接java直接调用python依赖库,你需要用python来执行他的依赖库
@DanBrown: 那我java拿的数据还传不进去是吗
@我需要学习: 可以传入参数的,有了两种方式1.像1楼所说通用引入jython.jar文件直接就能在java中写python,2.首先写好你的python脚本,通过java调用cmd然后去调用Python脚本 命令方式去调用 python xxx.py 参数1 参数2
@DanBrown: 看到一篇博客 java 通过jython.jar文件可以去掉用python脚本的math库 不知道按着这个方法能调用 别的库不
@我需要学习: 应该是可以的;java也有math库满足不了你需求必须要用python?
@DanBrown: 我的需求很麻瓜 就是要用python的各种函数
@DanBrown: 我既然用java掉成功了 哈哈哈
请问在python中已经实现,然后java直接调用这个py文件吗
这个只能调用 python 基础的 我要掉用的是python第三方依赖 我导到 python 脚本里面去的话 就找不到该依赖
@我需要学习: 不能直接调用 最好是在python里面实现你写的java那块内容
@ycyzharry: 业务是这样的 java 拿数据在去调numpy 这个依赖 计算
@我需要学习: 对啊 我的意思是都用python 包括拿数据
@ycyzharry: 如果 我会python 我直接用 puyhon 写了
@我需要学习: 网上很多例子的
@ycyzharry: 业务 不想用python操作数据库,是想用java操作数据库后再调用python函数计算 然后再把结果传给java
先看看自己的python脚本能在自己本机上能跑不(cmd),然后再用java尝试着掉
import numpy as np
if __name__ == '__main__':
a = np.ones(3)
print(a)
package com.wd.emrsearch.python;
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:\\python.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();
}}
}
控制器输出内容
start
[1. 1. 1.]
end
进程已结束,退出代码0
。。。
我也遇到这个问题了,怎么解决的。Java 执行 py 文件(文件中引用了第三方库),然后我Java报错,ImportError: No module named numpy; 大兄弟,能帮帮我吗? 告诉我怎么解决的
这问题你最后怎么解决的啊?
求大牛指点啊
– 我需要学习 6年前