【问题标题】:Python as "host" language in graalvmPython 作为 graalvm 中的“宿主”语言
【发布时间】:2019-11-12 11:43:05
【问题描述】:

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

我已经浏览了 graalvm 文档,并且我发现的唯一示例从 Python 代码实例化 Java 数组(见下文)我还浏览了此链接 https://www.graalvm.org/docs/reference-manual/embed/#access-java-from-guest-languages 中的多语言示例,它基本上运行 Java 多语言运行访问 java 对象的 python 代码的 API,但这不是我想要的。

下面的代码示例来自这个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") 

我得到了以下 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 不在其中。
  • 是的,我确实明白了——但是“import java”构造允许我在不使用多语言的情况下访问 Java 数组。有没有办法访问/实例化 Java 对象?基于此更新帖子。

标签: java python graalvm


【解决方案1】:

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

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

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

【讨论】:

  • 要访问不在标准库中的 Java 类,请指定类路径,如:graalpython --jvm --vm.cp=jarfile1.jar;jarfile2.jar myfile.py
  • graalpython --polyglot --jvm --vm.cp=~/workspace/src/hw.jar ~/workspace/python/polyglot.py KeyError: host symbol com.test.HelloPolyglotWorld is not已定义或访问被拒绝。
  • 通过添加 CLASSPATH 变量 (--vm.cp=$CLASSPATH) 使其工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多