java - 在 Java 中调用 Python 3.x 函数

标签 java python python-3.x module

我想在 Java 中调用 Python 函数。我知道有 Jython,它随 PythonInterpreter for Java 一起提供,但遗憾的是它只支持 Python 2.7。

为了更好地解释我想做什么。假设我在给定文件中有以下 Python 代码:

@staticmethod
def my_first_function():
   print("Hi!")

@staticmethod
def my_second_function():
   print("Hi again!")

我希望现在能够在 Java 中EXPLICITLY调用这样的函数:

PythonToJava pythonToJava = new PythonToJava("my/python/script/path");
pythonToJava.my_second_function(); 
pythonToJava.my_first_function();

如何使用/调用 Python 模块/脚本/类/等等。在 Java 中?

最佳答案

使用 Runtime.exec() 方法怎么样?只需执行 Process process = Runtime.getRuntime().exec("python script.py arg1 arg2")。 Runtime 是 java.lang 包中的一个类,因此您不需要进行任何花哨的导入。

More info here.

编辑

好吧,如果你有很多功能,那就不太容易管理了。另一方面,如果您不介意一堆包装文件,只需编写一些代码即可为每个函数自动构建一个。

查看这段 Python 代码。只需将 foo 替换为您调用的大型模块,就可以了。

from inspect import getmembers, isfunction
import foo

f_list=[o[0] for o in getmembers(foo) if isfunction(o[1])]
for x in f_list:
    print("Build "+str(x))
    with open("helper_"+str(x)+".py","wt") as f:
        f.write("""import foo
import sys

arg_list=sys.argv[1::]
print(foo.{x}(*arg_list))""".format(x=x))

关于java - 在 Java 中调用 Python 3.x 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52723244/

相关文章:

python-3.x - 如何使用 pandas 与其他数据框相比填充行之间的间隙?

java - 抽象类中的 Java 可变参数和泛型问题

java - Android DefaultSharedPreferences 字符串而不是整数

java - 如何从 Jenkins Pipeline Groovy 脚本更新配置属性文件?

python - 将 python xgboost dMatrix 转换为 numpy ndarray 或 pandas DataFrame

Python - 如何解析 smartctl 程序输出?

java - Eclipse 中的 Maven 依赖

python - 用python编写AES-CTR解密例程

python - 我正在尝试创建一个程序,将 2 个(用户)输入转换为列表,然后打印列表中的重复项

python-3.x - tensorflow 中的batch_size?理解概念