GVKun编程网logo

从Java中的Python脚本调用和接收输出?(java 调用python脚本)

23

在本文中,您将会了解到关于从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脚本)

从Java中的Python脚本调用和接收输出?(java 调用python脚本)

从Java执行Python脚本并接收该脚本的输出的最简单方法是什么?我一直在寻找不同的库,例如Jepp或Jython,但是大多数库都已过时。库的另一个问题是,如果我使用库,则需要能够轻松地在源代码中包含一个库(尽管我不需要为库本身提供源代码)。

因此,最简单/最有效的方法是简单地执行诸如使用runtime.exec调用脚本之类的操作,然后以某种方式捕获打印输出吗?或者,即使这对我来说很痛苦,我也可以将Python脚本输出到一个临时文本文件,然后以Java读取文件。

注意:Java和Python之间的实际通信不是我要解决的问题的要求。但是,这是我可以想到的轻松执行需要完成的操作的唯一方法。

Android:从Java代码调用Python脚本(通过SL4A)

Android:从Java代码调用Python脚本(通过SL4A)

是否可以使用SL4A从 Android平台上的Java代码调用/运行python脚本文件?基本上我有一个完整的Java Android应用程序,我有几个Python脚本,从各种网页上刮取一些信息.我想能够使用网页调用这些python脚本并获得结果.这可能吗?如果是这样,有人可以指出一两个方向吗?

谢谢,
掠夺

解决方法

Here you go,关于如何使用SL4A和Python制作Android应用程序的解决方案.我在本教程之后开发了一个功能齐全的Python应用程序,所以我可以保证它.我假设你可以添加Python代码,并用JSON进行数据交换.

我个人从未尝试将这两者混在一起,虽然我可能会看到你的帖子后尝试.

此外,如果您有任何问题/问题,与启动该示例相关,请在这里发布,我可能会帮助.

IDEA中通过Java调用Python脚本报错

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是可以的,一时间感觉很疑惑。

image-20210728150816398

解决方案

查了下,在IDAE中使用运行命令,其实是不能使用系统设置的环境变量的。需要在IDEA中另外设置。

image-20210728151016006

image-20210728151117749

设置完之后再执行就OK了。

java 调用执行jpython脚本

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脚本

在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脚本等相关知识的信息别忘了在本站进行查找喔。

本文标签: