运行scala类的Python包装器

2024-10-01 00:19:09 发布

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

我有一个maven scala项目,其中有一个scala对象(myObject),如下所示

项目名称

  • src
    • 主要
      • 斯卡拉
        • 乌提尔斯
          • 肌体

myObject的主要功能定义为

def main(args: Array[String]): Unit = {
 --stuff
} 

我需要创建一个python包装器脚本,从用户那里获取一些参数,并将这些参数传递给myObject。我该怎么做呢?到目前为止,我有一个python脚本,它有一个main,使用argparse接收一些参数,但不确定如何继续


Tags: 项目对象功能src脚本参数定义main
1条回答
网友
1楼 · 发布于 2024-10-01 00:19:09

如果我能准确地理解,Py4j是您希望在scala编译为JVM字节码时运行的库,您可以使用Py4j运行scala或java方法

以下是py4j网站主页的摘要:

Py4J使运行在Python解释器中的Python程序能够动态访问Java虚拟机中的Java对象。方法的调用就好像Java对象驻留在Python解释器中一样,Java集合可以通过标准的Python集合方法访问。Py4J还支持Java程序回调Python对象。Py4J是根据BSD许可证发行的

下面是一个使用Py4J的简单示例。下面的Python程序从JVM创建一个java.util.Random实例,并调用它的一些方法。它还访问一个自定义Java类AdditionApplication来添加生成的数字

>>> from py4j.java_gateway import JavaGateway
>>> gateway = JavaGateway()                   # connect to the JVM
>>> random = gateway.jvm.java.util.Random()   # create a java.util.Random instance
>>> number1 = random.nextInt(10)              # call the Random.nextInt method
>>> number2 = random.nextInt(10)
>>> print(number1, number2)
(2, 7)
>>> addition_app = gateway.entry_point               # get the AdditionApplication instance
>>> value = addition_app.addition(number1, number2) # call the addition method
>>> print(value)
9

相关问题 更多 >