在本文中,您将会了解到关于从Java中的Python脚本调用和接收输出?的新资讯,同时我们还将为您解释java调用python脚本的相关在本文中,我们将带你探索从Java中的Python脚本调用和接收
在本文中,您将会了解到关于从Java中的Python脚本调用和接收输出?的新资讯,同时我们还将为您解释java 调用python脚本的相关在本文中,我们将带你探索从Java中的Python脚本调用和接收输出?的奥秘,分析java 调用python脚本的特点,并给出一些关于Android:从Java代码调用Python脚本(通过SL4A)、IDEA中通过Java调用Python脚本报错、java 调用执行jpython脚本、java中调用python脚本的实用技巧。
本文目录一览:- 从Java中的Python脚本调用和接收输出?(java 调用python脚本)
- Android:从Java代码调用Python脚本(通过SL4A)
- IDEA中通过Java调用Python脚本报错
- java 调用执行jpython脚本
- java中调用python脚本
从Java中的Python脚本调用和接收输出?(java 调用python脚本)
从Java执行Python脚本并接收该脚本的输出的最简单方法是什么?我一直在寻找不同的库,例如Jepp或Jython,但是大多数库都已过时。库的另一个问题是,如果我使用库,则需要能够轻松地在源代码中包含一个库(尽管我不需要为库本身提供源代码)。
因此,最简单/最有效的方法是简单地执行诸如使用runtime.exec调用脚本之类的操作,然后以某种方式捕获打印输出吗?或者,即使这对我来说很痛苦,我也可以将Python脚本输出到一个临时文本文件,然后以Java读取文件。
注意:Java和Python之间的实际通信不是我要解决的问题的要求。但是,这是我可以想到的轻松执行需要完成的操作的唯一方法。
Android:从Java代码调用Python脚本(通过SL4A)
谢谢,
掠夺
解决方法
我个人从未尝试将这两者混在一起,虽然我可能会看到你的帖子后尝试.
此外,如果您有任何问题/问题,与启动该示例相关,请在这里发布,我可能会帮助.
IDEA中通过Java调用Python脚本报错
现象描述
我在IDEA中调试一段Java调用Python的代码,一直报下面的错误。
我的代码:
public class ScriptTest {
public static void main(String[] args) {
String result = "";
try {
Process process = Runtime.getRuntime().exec("python D:/xxl/my.py test中文" );
InputStreamReader ir = new InputStreamReader(process.getInputStream(),"GBK");
LineNumberReader input = new LineNumberReader(ir);
result = input.readLine();
input.close();
ir.close();
// process.waitFor();
} catch (Exception e) {
System.out.println("调用python脚本并读取结果时出错:" + e.getMessage());
}
System.out.println(result);
}
}
my.py的内容非常简单,如下:
import sys
if __name__ == "__main__":
filename = sys.argv[1]
print (filename)
当我执行上面的代码时,一直报下面的错误:
Connected to the target VM,address: '127.0.0.1:25684',transport: 'socket'
调用python脚本并读取结果时出错:Cannot run program "python": CreateProcess error=2,系统找不到指定的文件。
查了下这个错误,是因为找不到Python这个命令。
但是我通过命令行执行python是可以的,一时间感觉很疑惑。
解决方案
查了下,在IDAE中使用运行命令,其实是不能使用系统设置的环境变量的。需要在IDEA中另外设置。
设置完之后再执行就OK了。
java 调用执行jpython脚本
//pythonScript python脚本字符串
String pythonScript;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(pythonScript.getBytes());
Properties props = new Properties();
props.put("python.home", "C:\\python2");
props.put("python.console.encoding", "UTF-8");
props.put("python.security.respectJavaAccessibility", "false");
props.put("python.import.site", "true");
Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
interpreter = new PythonInterpreter();
interpreter.execfile(byteArrayInputStream);
java中调用python脚本
在java中调用python脚本有三种方式
【方式一】:
直接执行Python脚本代码 引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter(); 2 interpreter.exec("days=(''mod'',''Tue'',''Wed'',''Thu'',''Fri'',''Sat'',''Sun''); "); ///执行python脚本
【方式二】:
执行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter(); 2 InputStream filepy = new FileInputStream("D:\\demo.py"); 3 interpreter.execfile(filepy); ///执行python py文件 4 filepy.close();
【方式三】:
对于前两种方式可能存在以下问题:
当python调用第三方函数库的时候,不能调用。但是通过第三种方式可以解决。
直接上代码:
1.java代码部分
public static void Test1() throws Exception {
//TODO:执行python脚本
System.out.println("start python");
//需传入的参数
String a = "aaa", b = "bbb", c = "ccc", d = "中国";
// System.out.println("start;;;" + a);
//设置命令行传入参数
String[] argv = new String[] { "python", "data/pythonScrip/test1.py", a, b, c, d };
Process pr = Runtime.getRuntime().exec(argv);
System.err.println("pr:"+pr);
BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK"));
System.err.println("in:"+in);
String line;
// System.err.println(in.lines().count());
while ((line = in.readLine()) != null) {
System.out.println("line:"+line);
}
in.close();
pr.waitFor();
System.out.println("end");
}
2.python代码部分(test1.py)
import sys
print("======")
print(sys.argv[0])
print(sys.argv[1])
print(sys.argv[2])
print(sys.argv[3])
print(sys.argv[4])
3.输出结果
调用第三方函数库案例
1.java代码部分
public static void Test1() throws Exception {
//TODO:执行python脚本
System.out.println("start python");
//需传入的参数
String a = "F:/6-日志/20170822_主题相关进阶/Demo/w2v_java_call/bd/w2v_bd.model", b = "一带一路";
// System.out.println("start;;;" + a);
//设置命令行传入参数
String[] argv = new String[] { "python", "data/pythonScrip/w2v_java.py", a, b};
Process pr = Runtime.getRuntime().exec(argv);
System.err.println("pr:"+pr);
BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK"));
System.err.println("in:"+in);
String line;
// System.err.println(in.lines().count());
while ((line = in.readLine()) != null) {
System.out.println("line:"+line);
}
in.close();
pr.waitFor();
System.out.println("end");
}
2.Python代码部分
from gensim.models import word2vec #调用第三方函数库
import sys
# def get_vector(word,model):
print (sys.argv[0]) #读取动态参数,作为python脚本的输入
print (sys.argv[1])
print (sys.argv[2])
model = word2vec.Word2Vec.load(sys.argv[1])
vector=model[sys.argv[2]]
print(vector)
输出结果
关于从Java中的Python脚本调用和接收输出?和java 调用python脚本的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android:从Java代码调用Python脚本(通过SL4A)、IDEA中通过Java调用Python脚本报错、java 调用执行jpython脚本、java中调用python脚本等相关知识的信息别忘了在本站进行查找喔。
本文标签: