1. jython 可以调用java包吗
参考下面方法:
1.直接执行python脚本代码
引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter();
2 interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); ///执行python脚本
2. 执行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter();
2 InputStream filepy = new FileInputStream("D:\\demo.py");
3 interpreter.execfile(filepy); ///执行python py文件
4 filepy.close();
3. 使用Runtime.getRuntime()执行脚本文件
这种方式和.net下面调用cmd执行命令的方式类似。如果执行的python脚本有引用第三方包的,建议使用此种方式。使用上面两种方式会报错java ImportError: No mole named arcpy。
1 Process proc = Runtime.getRuntime().exec("python D:\\demo.py");
2 proc.waitFor();
2. 如何用java 执行jython
参考下面方法:
1.直接执行Python脚本代码
引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter();
2 interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); ///执行python脚本
2. 执行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter();
2 InputStream filepy = new FileInputStream("D:\\demo.py");
3 interpreter.execfile(filepy); ///执行python py文件
4 filepy.close();
3. 使用Runtime.getRuntime()执行脚本文件
这种方式和.net下面调用cmd执行命令的方式类似。如果执行的python脚本有引用第三方包的,建议使用此种方式。使用上面两种方式会报错java ImportError: No mole named arcpy。
1 Process proc = Runtime.getRuntime().exec("python D:\\demo.py");
2 proc.waitFor();
3. Java怎么用jython调用python
args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动百参数。此处适合所有合法的度 JVM 启动参数,例如:
-agentlib:libname[=options]
-classpath classpath
-verbose
-Xint
4. 如何将Jython类型转换为Java类型
要将 Jython类型转换为 Java类型(以及相反),使用下面例子中的函数:def mapMapFromJava (map): """ Convert a Map to a Dictionary. """ result = {} iter = map.keySet().iterator() while iter.hasNext(): key = iter.next() result[mapFromJava(key)] = mapFromJava(map.get(key)) return result def mapCollectionFromJava (coll): """ Convert a Collection to a List. """ result = [] iter = coll.iterator(); while iter.hasNext(): result.append(mapFromJava(iter.next())) return result def mapFromJava (object): """ Convert a Java type to a Jython type. """ if object is None: return object if isinstance(object, util.Map): result = mapMapFromJava(object) elif isinstance(object, util.Collection): result = mapCollectionFromJava(object) else: result = object return result def mapSeqToJava (seq): """ Convert a sequence to a Java ArrayList. """ result = util.ArrayList(len(seq)) for e in seq: result.add(mapToJava(e)); return result def mapDictToJava (dict): """ Convert a Dictionary to a Java HashMap. """ result = util.HashMap() for key, value in dict.items(): result.put(mapToJava(key), mapToJava(value)) return result def mapToJava (object): """ 将Jython类型转换为Java类型 """ if object is None: return object t = type(object) if t == TupleType or t == ListType: result = mapSeqToJava(object) elif t == DictType: result = mapDictToJava(object) else: result = object return result 在使用了 mapToJava 后,这些类型可以写为java.io.ObjectOutputStream。从 java.io.ObjectInputStream 读出一个对象后,可以用 mapFromJava 将对象转换回 Jython 类型。注意这些方法支持有限的、但是广泛使用的一组内置 Jython类型。Jython 自动转换类似值的类型,如数字和字符串。不支持用户定义的类。映射Java类型继续这个例子,下面显示了继续使用上一屏讨论的映射函数的情况:data = (1,2,3, [1,2,3], [c for c in "Hello!"], "Hello!", {1:'one', 2:'two'}) print "data:", data toJava = mapToJava(data) print "toJava:", toJava fromJava = mapFromJava(toJava) print "fromJava:", fromJava print print "type(%s)=%s" % ("data", type(data)) print "type(%s)=%s" % ("toJava", type(toJava)) print "type(%s)=%s" % ("fromJava", type(fromJava)) 打印:data: (1, 2, 3, [1, 2, 3], ['H', 'e', 'l', 'l', 'o', '!'], 'Hello!', \ {2: 'two', 1: 'one'}) toJava: [1, 2, 3, [1, 2, 3], [H, e, l, l, o, !], Hello!, {2=two, 1=one}] fromJava: [1, 2, 3, [1, 2, 3], ['H', 'e', 'l', 'l', 'o', '!'], 'Hello!', \ {2: 'two', 1: 'one'}] type(data)=org.python.core.PyTuple type(toJava)=org.python.core.PyJavaInstance type(fromJava)=org.python.core.PyList 注意PyTuple变成了 PyJavaInstance,然后是 PyList.还要注意 toJava 表单的格式不一样了。这是因为它是一个 Java 对象,并且它是由 Java toString() 方法而不是 Jython repr()函数打印的。Jython 将 PyJavaInstance 这种类型原样传递给 Java API。 最后,注意 data 和 fromJava 值是相同的,只不过元组现在是一个相应的列表。更多可咨询远标老师
5. Python和Jython的区别简述
jython用途比较少。主要在两个场景下:
操作系统不提供cpython, 只有JAVA可以用。比如sun工作站,或者是某些嵌入式设备
不得不用一些JAVA的包来提供功能。所以只能用jython来调用JAR包
jython因为有java的即时编译器和编译优化效果,所有速度还是不错的。
不过jython的总体来讲,支持包不够多。不象是cpython 2.7那样,几乎所有的包都支持。极其丰富。不过纯python的包都可以在jython上安装使用。
jython的版本号通常比cpython的要低。不过现在到了2.7也基本上持平了。流行的jython就是2.5, 2.7两个版本
另外jython似乎对于GIL处理的更好些。所以原则上讲,并发性能更好。所以jython的线程应该会比cpython的线程更强大。可以更好的利用到java的性能,把CPU的各个核都用上。
另外内存的使用上,按理jython也可以利用到java的一些优点。cpython通常字典超 过2GB内存就会很慢。也许jython要好些。
总体来讲,性能上还是cpython要更快些。最快的是pypy,其次是cython, 再次是cpython, jython应该在后面。
6. jython和python的区别是什么
我们通常意义上说的python是cpython,也就是完全用C实现的python,它支持C的扩展,不支持java什么的扩展。
jython是完全用jython实现的python,它支持用java扩展,貌似无法用C扩展。
相关推荐:《python培训视频》
jython用途比较少。主要在两个场景下:
1、操作系统不提供cpython, 只有JAVA可以用。比如sun工作站,或者是某些嵌入式设备。
2、不得不用一些JAVA的包来提供功能。所以只能用jython来调用JAR包。
jython因为有java的即时编译器和编译优化效果,所有速度还是不错的。
不过jython的总体来讲,支持包不够多。不象是cpython 2.7那样,几乎所有的包都支持。极其丰富。不过纯python的包都可以在jython上安装使用。
jython的版本号通常比cpython的要低。不过现在到了2.7也基本上持平了。流行的jython就是2.5,2.7两个版本。
另外jython似乎对于GIL处理的更好些。所以原则上讲,并发性能更好。所以jython的线程应该会比cpython的线程更强大。可以更好的利用到java的性能,把CPU的各个核都用上。
另外内存的使用上,按理jython也可以利用到java的一些优点。cpython通常字典超 过2GB内存就会很慢。也许jython要好些。
总体来讲,性能上还是cpython要更快些。最快的是pypy,其次是cython, 再次是cpython, jython应该在后面。
7. 如何在Java项目中嵌入Jython代码
Hello World!——它在Jython中如下所示:
清单1. Jython的Hello World!
print"HelloWorld!"
在Jython中(就像在Python中),源文件使用扩展名“py”。“Hello World”语句放在hello.py之类的源文件中时,就是一个完整的程序。
作为比较,看一下等效的Java程序,看看下面的hello.java文件:
清单2.Java的Hello World!
publicclasshello{
publicstaticvoidmain(String[]args){
System.out.println("HelloWorld!");}}
Jython的格式显然更简单,通常都是如此。Jython好的方面当然是代码可以直接解释,也可以翻译成Java源代码并自动编译为类文件。可以用下面的Java命令来运行Hello World程序:C:\java-Dpython.home=C:\jython-2.1-cpC:\jython-2.1\jython.jar
org.python.util.jythonhello.py
也可以用下面更方便的Jython脚本运行这个程序:C:\
jythonhello.py
8. Jython是编程语言吗与python和java有什么关系简单介绍下,不要百科的资料。
jython是用java写的python解释器,用jython解释的python程序可以调用java写的拓展库
9. jython 可以和java用同一个虚拟机吗
答案是肯定的,可以,两个软件的使用不会受到影响,更不会因为环境变量的设置受到影响。
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
[网络环境变量](http://ke..com/link?url=__i_oFjCHoZZAykcXN2K2Veq)
1、打开环境变量设置:
2这里系统应该是默认有个叫做Path的环境变量(上面是用户环境变量,设置的变量只会影响到当前的用户;下面是系统环境变量,其他的用户进入系统也是可以使用这些变量的,这种设置是因为windows可以拥有多个用户使用,服务器版本可以同时多个用户在线,桌面版同时只能一个用户在线),包括你设置的一些java的可执行文件的目录。
3、但凡设置到这里面的文件,都可以dos系统直接执行,比如:我这Path里面添加了一条maven的环境变量:C:\Program Files (x86)\apache-maven-3.0.5\bin;
4、执行mvn -version
5、这里有两个的运行结果:python -V java -version