首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python作为graalvm中的“宿主”语言

Python作为graalvm中的“宿主”语言
EN

Stack Overflow用户
提问于 2019-07-01 20:30:25
回答 1查看 434关注 0票数 2

我正在尝试使用graalvm从Python代码中访问Java对象。有人能给我指点样本代码吗?本质上,我希望能够运行graalpython -polyglot-jvm myscript.py,其中myscript.py能够实例化一个myscript.py对象。

我已经阅读了graalvm文档,并找到了从Python代码中实例化Java数组的唯一示例(参见下面),我还在这个链接https://www.graalvm.org/docs/reference-manual/embed/#access-java-from-guest-languages中介绍了polyglot示例,它实质上运行的是运行访问Java对象的python代码的java,但这不是我想要的。

下面的代码示例来自这个链接,它还提到“并访问数组以外的其他类,需要重新编译映像并提供反射配置文件”,但我不太明白我是如何做到这一点的。

代码语言:javascript
复制
import java

array = java.type("int[]")(4)
array[2] = 42
print("Printing Java Array" , array[2])

我尝试将上面的代码修改为:

代码语言:javascript
复制
import java
import polyglot

array = java.type("int[]")(4)
array[2] = 42
print("Printing Java Array" , array[2])
# Just to see if I can access Java , example copied from Javascript -> Java 
re = polyglot.eval(string="RegExp()", language="java") 

我得到了以下信息:

代码语言:javascript
复制
Printing Java Array 42
Traceback (most recent call last):
File "polyglot.py", line 8, in <module 'polyglot.py'>
re = polyglot.eval(string="RegExp()", language="java")
NotImplementedError: No language for id java found. Supported   languages are: [internal/nfi-native, nfi, regex, js, llvm, python, ruby]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 07:19:42

不能从字符串中计算Java代码-- Java语言是特殊的,因为它是宿主语言--您只能访问类路径上可用的东西(作为字节码)。要访问Java,必须编写Python代码,而不是Java代码,例如:

代码语言:javascript
复制
import java
regexpClass = java.type("sun.misc.Regexp")
javaRegexp = regexpClass("hello")

对象行为合理,即实例化与调用相同,dir(javaRegexp)将为您提供可用的Java方法等等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56842074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档