Вызовите функции Python 3.x в Java - PullRequest
0 голосов
/ 09 октября 2018

Я хочу вызывать функции Python на Java.Я знаю, что есть Jython, который поставляется с PythonInterpreter для Java, но, к сожалению, он поддерживает только Python 2.7.

Для лучшего объяснения того, что я хочу сделать.Допустим, у меня есть следующий код Python в данном файле:

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

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

Я хочу иметь возможность ЯВНО вызывать такие функции в Java сейчас:

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

Как я могу использовать / вызывать модуль Python / скрипт / класс / и т.д.в Java?

1 Ответ

0 голосов
/ 09 октября 2018

Как насчет использования метода Runtime.exec ()?Просто сделай Process process = Runtime.getRuntime().exec("python script.py arg1 arg2").Runtime - это класс из пакета java.lang, поэтому вам не нужно выполнять какой-либо необычный импорт.

Подробнее здесь.

РЕДАКТИРОВАТЬ

Хорошо, не слишком легко управлять, если у вас много функций.С другой стороны, если вы не возражаете против множества файлов-оберток, просто сделайте немного кода, чтобы автоматически создать его для каждой функции.

Посмотрите на этот маленький кусочек кода 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...