Python 作为 graalvm 中的 "host" 语言
Python as "host" language in graalvm
我正在尝试使用 graalvm 从 Python 代码访问 Java 对象。有人可以指出示例代码吗?本质上我希望能够 运行 graalpython --polyglot --jvm myscript.py 其中 myscript.py 能够实例化一个 Java 对象
我已经浏览了 graalvm 文档,我发现的唯一示例是从 Python 代码实例化 Java 数组(见下文)我还浏览了这个中的多语言示例link https://www.graalvm.org/docs/reference-manual/embed/#access-java-from-guest-languages 本质上 运行s Java 多语言 API 其中 运行s python 访问 [=37= 的代码] object ,但这不是我想要的。
下面的代码示例来自此 link,其中也提到了 "and accessing other classes than Java arrays, it is required to recompile the image and provide a reflection configuration file",但我不太明白如何执行此操作。
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")
我得到了以下 o/p:
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]
您无法评估字符串中的 Java 代码 - Java 语言的特殊之处在于它是宿主语言 - 您只能访问类路径上可用的内容(如字节码)。要访问 Java,您必须编写 Python 代码来执行此操作,而不是 Java 代码,例如:
import java
regexpClass = java.type("sun.misc.Regexp")
javaRegexp = regexpClass("hello")
对象行为合理Python-ish,即实例化与调用相同,dir(javaRegexp)
将为您提供可用的Java方法等。
我正在尝试使用 graalvm 从 Python 代码访问 Java 对象。有人可以指出示例代码吗?本质上我希望能够 运行 graalpython --polyglot --jvm myscript.py 其中 myscript.py 能够实例化一个 Java 对象
我已经浏览了 graalvm 文档,我发现的唯一示例是从 Python 代码实例化 Java 数组(见下文)我还浏览了这个中的多语言示例link https://www.graalvm.org/docs/reference-manual/embed/#access-java-from-guest-languages 本质上 运行s Java 多语言 API 其中 运行s python 访问 [=37= 的代码] object ,但这不是我想要的。
下面的代码示例来自此 link,其中也提到了 "and accessing other classes than Java arrays, it is required to recompile the image and provide a reflection configuration file",但我不太明白如何执行此操作。
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")
我得到了以下 o/p:
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]
您无法评估字符串中的 Java 代码 - Java 语言的特殊之处在于它是宿主语言 - 您只能访问类路径上可用的内容(如字节码)。要访问 Java,您必须编写 Python 代码来执行此操作,而不是 Java 代码,例如:
import java
regexpClass = java.type("sun.misc.Regexp")
javaRegexp = regexpClass("hello")
对象行为合理Python-ish,即实例化与调用相同,dir(javaRegexp)
将为您提供可用的Java方法等。