Python与Java之间的相互调用——Jython

概述:

Jython 是一种可以把两种不同的编程语言结合在一起的工具。首先,它使Python 程序员介入到Java 开发环境并让他们能快速开发方案原型,以便无缝地集成到现有的Java 平台上。其次,它能在Java 中加入脚本语言,并以此来简化数计百万计的Java 程序员的工作。Java 程序员们,再也不用为他们刚写的一个类写一大堆的测试用例或驱动程序。Jython
提供了Python 的大部分功能,以及实例化Java 类并与Java 类交互的功能。Jython 代码被动态地编译成Java 字节码,因此,你可以用Jython 扩展Java 类。也可以用Java 来扩展Python。在Python 中写一个类,像使用Java 类一样使用这个类是很容易的事情。你甚至可以把Jython 脚本静态地编译为Java 字节码。

——《Python核心编程》

本人环境:

系统:CentOS release 6.5 (Final)

JDK:java version "1.7.0_75"

Python:Python 2.6.6

Jython:2.7-b1

安装:

jython安装包地址(jython-installer-2.7-b1.jar):

http://download.csdn.net/detail/u013761665/8590143

安装步骤:

1.切换工作目录到下载的jython-installer-2.7-b1.jar所在目录下(当然,如果你使用一些相对或是绝对路径也是可以的);

2.使用java -jar jython-installer-2.7-b1.jar命令进行安装(此步操作的前提是你的系统中已经成功安装了jdk);

3.进入jython安装目录,输入./jython。注意,这里不能使用jython,除非你有配置你的PATH

java代码编写:

package com.w.shell.jar.main;

public class Main {

    public Main() {
        System.out.println("Hello, Welcome this shell.");
    }

    /**
     * @author Q-WHai
     * 2015-4-13
     */
    public static void main(String[] args) {
        new Main();
    }

    public static void printLog() {
        System.out.println("This is a shell log show 2 you. And you will get nothing whit this function return.");
    }

    public static String getLog() {
        String toReturn = "Custom log";
        System.out.println("This is another shell log show 2 you. And you will get a return String.");
        return toReturn;
    }
}

jar包制作:

通过上面的Java代码操作jar.不过这里不再对jar包的操作进行过多地叙述,因为在本人早期的博客有详细地说明(在cmd中使用指令来执行jar包).

jython代码编写:

而对于jython的代码则十分简单,如下:

import sys

sys.path += ["/root/study/coding/java/shell.jar"]

from com.w.shell.jar.main import Main

Main.printLog()

result = Main.getLog()
print result

运行示例:

1.将工作目录切换至jython的安装目录下(当然,如果你使用一些相对或是绝对路径也是可以的);

2.运行../../splace/jython/jython jython_test.py(即:your_jython_path your_jython.py)

3.运行效果:

时间: 2024-10-09 14:57:27

Python与Java之间的相互调用——Jython的相关文章

java和bat相互调用

1.bat 启动java main函数 1.将project导出JAR,过程中注意选择main class 2.新建bat,设置环境变量 3.1启动程序,如果想在黑窗口中打印数字,可以system.out,程序运行万 @echo off @setlocal set JAVA_HOME=jdk1.6.0_25 set PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin java -jar start.jar 或者直接调用class文件 @echo off @setlo

内部类和外部类之间的相互调用

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 一般内部类在外部类的成员变量位置,像这样: 1 public class Outer { 2 class Inner{ 3 4 } 5 } 1.外部类访问内部类: 内部类被static修饰:可以直接new Inner in = new Inner(); 内部类没有被static修饰:得先new出来外部类的实例,再new内部类的 Inner in = new Outer().new Inner(

关于cocos2d-x 和安卓之间的相互调用

近期在研究cocos2d游戏移植安卓须要调用非常多方法.所以在研究之中写下它们之间相互调用 首先,cocos2d调用安卓 在一个.h文件里加入头文件 #include <jni.h> #include "platform\android\jni\JniHelper.h" JniMethodInfo minfo;//定义Jni函数信息结构体 //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 bool isHave = JniHelper:

Iframe父页面与子页面之间的相互调用

iframe元素就是文档中的文档. window对象: 浏览器会在其打开一个HTML文档时创建一个对应的window对象.但是,如果一个文档定义了一个或者多个框架(即:包含一个或者多个frame或者iframe标签),浏览器就会为原始文档创建一个window对象,再为每个iframe创建额外的window对象,这些额外的window对象是原始窗口的子窗口. contentWindow: 是指指定的iframe或者iframe所在的window对象 Demo1 父页面fu.html: <!DOCT

uLua学习笔记(三):Unity3D和Lua之间的相互调用

这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方法还是比较简单的,所以先说这个,由于这部分在学习笔记(一)中已经说的挺多的了,更多的内容点击这里回去看,所以这里我们就来看一个简单的示例即可: 1 using LuaInterface; 2 using UnityEngine; 3 4 public class UnityCallLua : Mon

【Python】+类内部方法相互调用

1 class TestDate: 2 a = 1 3 4 # "__init__"为类的构造函数 5 def __init__(self): 6 self.a = 666 7 pass 8 9 def a_1(self): 10 print("a_1") 11 self.a_2() 12 13 def a_2(self): 14 print(self.a) 15 print("a_2") 16 17 18 if __name__ == &quo

两个java工程之间的相互调用方法

如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种方式:①使用apache的HttpClient方式.②使用JDK自带的java.net包下的HttpURLConnection方式. 这次主要讲解HttpURLConnection方式:HttpURLConnection传递请求常用的有两种方式:POST和GET方式.使用setRequestMeth

java 与 R 相互调用

https://www.r-project.org/ http://cos.name/2013/08/r-rjava-java/ http://blog.csdn.net/hwssg/article/details/39177959 目录 rJava介绍 rJava安装 rJava实现R调用Java rJava(JRI)实现Java调用R (win7) rJava(JRI)实现Java调用R (Ubuntu) 1. rJava介绍 rJava是一个R语言和Java语言的通信接口,通过底层JNI实

Java构造方法的相互调用

在Java中,如果类的一个构造方法想要调用另一个构造方法,需要用this(参数列表)的形式来调用. public class Student { String name; int age; public Student(int age) { this("Jack",age); } public Student(String name, int age) { this.name = name; this.age = age; } }