Java调用Python

今天遇到java调用一个python脚本的问题,纠结了大半天,遇到各种问题。网上搜索的大部分都是用jython,但是我想要调用的python脚本里有import urllib,这个urllib也不是什么第三方扩展库,在python的安装path下的lib下就有,在python命令行下肯定是能找到的。但是用jython的话,sys的path里面就太少了。示例代码:

import org.python.core.Py;import org.python.core.PySystemState;import org.python.util.PythonInterpreter;public class Test3 {    /**     * @param args     */    public static void main(String[] args) {                PythonInterpreter interpreter = new PythonInterpreter();                  PySystemState sys = Py.getSystemState();         //sys.path.add("D:\jython2.5.2\Lib");        System.out.println(sys.path.toString());                 interpreter.exec("print 'hello'");                  interpreter.exec("import sys");        interpreter.exec("print sys.path");        //        interpreter.exec("import urllib");//        interpreter.exec("print urllib");    }}

登录后复制

 打印出来的sys.path为:

Txt代码  

[‘D:\eclipse_jee_workspace\ZLabTest\lib\Lib’, ‘__classpath__’, ‘__pyclasspath__/’]  

 这儿就只有eclipse的工程的路径包含了,所以当然找不到urllib啦。而在命令行下打印sys.path为:

立即学习“Java免费学习笔记(深入)”;

用jython差的lib库少太多了,也懒得用类似sys.path.add(“D:\jython2.5.2\Lib”);一个一个加了,所以果断放弃jython。

 然后查到可以用Runtime.getRuntime().exec(“python test.py”);示例代码如下:

import java.io.BufferedReader;import java.io.InputStreamReader;public class Test5 {        public static void main(String[] args){                try{                        System.out.println("start");                        Process pr = Runtime.getRuntime().exec("python test.py");                                                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();                        }                }}

登录后复制

 test.py的文件内容为:

Python代码  

import sys  import urllib  print "hello"  print sys.path

登录后复制

 java程序运行的结果为:

Txt代码  

start  hello  ['D:\eclipse_jee_workspace\ZLabTest', 'C:\Windows\system32\python27.zip', 'D:\Python27\DLLs', 'D:\Python27\lib', 'D:\Python27\lib\plat-win', 'D:\Python27\lib\lib-tk', 'D:\Python27', 'D:\Python27\lib\site-packages']end

登录后复制

 这就比较对了。但是中途还是遇到了很多问题,在Eclipse中运行上面的java程序抛出异常:

java.io.IOException: Cannot run program “python”: CreateProcess error=2, ϵͳÕҲ»µ½ָ¶

at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)

at java.lang.Runtime.exec(Runtime.java:593)

at java.lang.Runtime.exec(Runtime.java:431)

at java.lang.Runtime.exec(Runtime.java:328)

at com.mysrc.Test5.main(Test5.java:10)

Caused by: java.io.IOException: CreateProcess error=2, ϵͳÕҲ»µ½ָ¶

at java.lang.ProcessImpl.create(Native Method)

at java.lang.ProcessImpl.(ProcessImpl.java:81)

at java.lang.ProcessImpl.start(ProcessImpl.java:30)

at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)

… 4 more

就是没法调用python程序,而如果是在命令行下用javac编译,然后java执行的话肯定是对的。怎么才能在Eclipse里也能正常运行了,网上查了半天,在run configurations->environment新建一个PATH,值设为安装的python的路径,再运行就OK了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2281691.html

(0)
上一篇 2025年2月27日 18:51:36
下一篇 2025年2月23日 11:05:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论