Я пытаюсь распечатать возврат метода на python внутри java. Это мой код Python внутри файла file1.py:
def main():
return(5)
А вот мой Java-код:
import java.io.*;
public void sampleMethod(){
try{
System.out.println(Runtime.getRuntime().exec("cmd /c start file1.py main()"));
}
catch (IOException e){
System.out.println("Failed" + e);
}
}
Когда бегу, возвращает java.lang.ProcessImpl@12a337b
. Каждый раз, когда я запускаю, все после символа @
меняется и кажется случайным.
Основная причина, по которой у меня есть функция в скрипте python, заключается в том, что может быть оператор return, который, как я думал, мог быть проблемой.
Правильно. Но ваш скрипт ничего не делает в том смысле, что вы не должны ожидать вывода любой. Похоже, вы печатаете какой-то объект Process. Вы должны посмотреть в документации примеры того, как получить стандартный вывод вашего процесса. Но опять же, ваш скрипт python ничего не выводит на стандартный вывод.
Итак, вот документы: docs.oracle.com/javase/7/docs/api/java/lang/Process.html похоже, что вам нужно использовать метод getInputStream
, который вернет какой-то файловый объект, я уверен (что вам, вероятно, придется из .read
)
Строка java.lang.ProcessImpl@12a337b
, которую вы видите, выглядит так:
результат toString()
от Process
, возвращенный
Runtime.getRuntime().exec("....")
.
Вместо этого вы, вероятно, захотите увидеть код выхода этого процесса (5
в вашем случае).
Чтобы получить его, вы должны дождаться завершения процесса, а затем получить его код выхода:
Process process = Runtime.getRuntime().exec("cmd /c start file1.py main()");
process.waitFor();
int exitCode = process.exitValue();
System.out.println(exitCode);
Для получения дополнительной информации см. Javadoc Object.toString()
, Process.waitFor()
и Process.exitValue()
.
Я подозреваю, что они действительно хотят читать из стандартного вывода процесса.
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("import sys\nsys.path.append('pathToModules if they are not there by default')\nimport yourModule");
// execute a function that takes a string and returns a string
PyObject someFunc = interpreter.get("funcName");
PyObject result = someFunc.__call__(new PyString("Test!"));
String realResult = (String) result.__tojava__(String.class);
попробуй
Ваш код Python ничего не делает, кроме определения функции btw.
main
не является чем-то особенным в Python, а точка входа скрипта Python каждый - это просто первая строка.