专栏首页python3scala调用python

scala调用python

scala项目中调用python的几种方法

首先在工程目录某个地方建立了一个python文件 test.py

import sys

def addNum(a, b):
    return a + b

if __name__ == '__main__':
    a = 3
    b = 7

    # if args input
    if len(sys.argv) == 3:
        a = int(sys.argv[1])
        b = int(sys.argv[2])

    x = addNum(a, b)
    print x

    with open("src/test.txt", 'w') as f:
        f.write("the result: " + str(x))

方法1:启动进程执行python脚本

在scala里面启动一个本地进程,执行python程序

// method1: launch local runtime process to exec python file
// just exec file
val proc1 = Runtime.getRuntime().exec("python src/test.py")
proc1.waitFor()
// exec with parameters
val proc2 = Runtime.getRuntime().exec("python src/test.py 8 9")
proc2.waitFor()

其中:

  • 可以在命令行中带参数
  • 本地python环境中的第三方扩展包可以正常使用

方法2:用Jpython来调用

Jpython(http://www.jython.org/)是一个java的扩展包,在scala里面可以直接调用

首先将Jpyhon standaone的jar文件导入到scala工程并引用

import org.python.core.{PyFunction, PyInteger, PyObject}
import org.python.util.PythonInterpreter
// method2: use Jpython module
val interpreter = new PythonInterpreter()
// exec python code
interpreter.exec("print 'hello jpython'")
// exec python file in JVM
val py_file = new FileInputStream("src/test.py")
interpreter.execfile(py_file)
py_file.close()
// call python funtion and return result (oops: work in java but not in scala ~)
//        val a = 15
//        val b = 17
//        val func = interpreter.get("addNum", PyFunction.class).asInstanceOf[PyFunction]
//        val pyobj = func.__call__(new PyInteger(a), new PyInteger(b))
//        println(pyobj.toString())

其中:

  • 用Jpython理论上可以用三种方式调用python:执行语句,执行文件,调用函数,但是由于莫名其妙的原因,scala中call python的函数不能用
  • 用Jpython的方式无法使用python本地安装的第三方扩展包,因为Jpython运行在JVM上
  • 这种方式不建议使用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python -- 安装

    小Q 等闲变却故人心却道故人心易变。                                                          --- ...

    py3study
  • python虚拟开发环境搭建

    如上命令执行报错,解决办法如下: 使用缓存方式安装: 在~/.pyenv目录下,新建cache目录,放入下载好的版本文件。

    py3study
  • python 操作mysql 数据库 安

    python 需要连接Mysql 数据库 、使用pip 安装 mysql-python ,安装一直报错。找不到包依赖之类的、于是下载 直接 下载 mysql-p...

    py3study
  • R语言携手Python绘制weblogo图

    我们知道R语言在作图统计方面很是实用,但是在其他游戏开发、网页制作、人工智能等很多方面相对于python是很局限。今天我们来以weblogo为例展示如何在R语言...

    一粒沙
  • Python -- 安装

    小Q 等闲变却故人心却道故人心易变。                                                          --- ...

    py3study
  • python中any和all如何使用

    python中any()和all()如何使用 和 对于检查两个对象相等时非常实用,但是要注意, 和 是python内置函数,同时numpy也有自己实现的 和 ,...

    企鹅号小编
  • Python自学之路

    ‘’坚持不是一件容易的事情,兴趣是最好的老师‘’,等你坚持过后你总会这么对别人侃侃而谈。

    Anymarvel
  • 安装psycopg2碰见的各种错误

    一套新的Linux环境,需要部署个python写的程序,逻辑就是读取EDB数据库,进行一些数据的操作。由于连接的是EDB,需要pg的库psycopg2,当然能从...

    bisal
  • Python全栈开发实战!看大神一节课带你做一个自己的音乐网站

    都知道python现在很火,很有发展,都想来学习python,从事python相关职业,可是我们学了python到底要干什么呢?

    云飞
  • [工具]如何在vscode中构建python工程

    之前用过Anaconda下的Spyder、Pycharm和Jupyter等写过python的数据分析项目,各有优劣。因为我的C++和Golang项目都是使用的V...

    TOMOCAT

扫码关注云+社区

领取腾讯云代金券