在java中获取python方法的结果会返回意外的结果

在java中获取python方法的结果会返回意外的结果,java,python,Java,Python,我试图在java内部用python打印出一个方法的返回。 这是我的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()")); }

我试图在java内部用python打印出一个方法的返回。 这是我的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. 每次我跑步时,@符号后面的一切都是不同的,似乎是随机的

当您这样做时:

System.out.println("Failed" + e);
您正在使用默认的toString方法打印IOException对象。您要使用以下方法:

字符串java.lang。ProcessImpl@12a337b你看是 由返回的进程的toString结果 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和


试试看

你的Python代码除了定义一个函数之外什么都不做。main在Python中没有什么特别之处,每个Python脚本的入口点都只是第一行。我在Python脚本中有一个函数的主要原因是可以有一个return语句,我认为这可能是问题所在。对。但是您的脚本没有做任何您不应该期望任何输出的事情。看起来您正在打印某个进程对象。您应该查看文档,了解如何获得流程的标准输出的示例。但是,你的python脚本没有将任何内容打印到stdoutSo这里是文档:看起来你需要使用getInputStream方法,它将返回一些类似文件的对象,我相信你可能必须这样做。
Process process = Runtime.getRuntime().exec("cmd /c start file1.py main()");
process.waitFor();
int exitCode = process.exitValue();
System.out.println(exitCode);
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);