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

2024-06-16 11:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用graalvm从Python代码访问Java对象。有人能给我指一下示例代码吗?基本上我希望能够运行graalpython-polyglot-jvmmyscript.py文件哪里myscript.py文件能够实例化Java对象

我已经浏览了graalvm文档,我发现的唯一一个示例是从Python代码实例化Java数组(见下文),我也浏览了链接https://www.graalvm.org/docs/reference-manual/embed/#access-java-from-guest-languages中的polyglot示例,它实际上运行Java polyglot API,该API运行访问Java对象的Python代码,但这不是我想要的。你知道吗

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

import java

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

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

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") 

我得到了以下订单:

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]

Tags: 文件对象实例代码pyimport示例java
1条回答
网友
1楼 · 发布于 2024-06-16 11:43:24

您不能从字符串计算Java代码—Java语言的特殊之处在于它是宿主语言—您只能访问类路径上可用的内容(作为字节码)。要访问Java,必须编写Python代码,而不是Java代码,例如:

import java
regexpClass = java.type("sun.misc.Regexp")
javaRegexp = regexpClass("hello")

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

相关问题 更多 >