将 Python 控制台输出保存到 Java 变量

问题描述

我在将 python 脚本的输出保存到 java 变量时遇到问题。我的代码看起来像...

Python 脚本:

def main(argv):

    filepath = argv[1]
    ...
    output = results.get_forecast(14).predicted_mean.to_json()
    print(output)
    
    
if __name__ == "__main__":
    main(sys.argv)

它有效 - 结果打印到控制台 - 一切正常。

我的 Java 代码

ProcessBuilder pb = new ProcessBuilder("python","-u","path/to/script.py",args_filepath).inheritIO();

        try {
            Process p = pb.start();

            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            StringBuilder predictionString = new StringBuilder();
            String line;

            while((line = br.readLine()) != null) {
                predictionString.append(line);
            }

            int exitCode = p.waitFor();
            System.out.println("VALUE: " + predictionString.toString());
            br.close();

        } catch (IOException | InterruptedException e) {
            e.printstacktrace();
        }

那部分也有效...我的意思是它的工作方式是执行 python 代码,将输出写入控制台,但它不会将输出字符串保存到 predictionString

解决方法

使用 redirectErrorStream 方法捕获 output 流。

ProcessBuilder pb = new ProcessBuilder("python","-u","path/to/script.py",args_filepath)
                    .redirectErrorStream(true);

代替

ProcessBuilder pb = new ProcessBuilder("python",args_filepath).inheritIO();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...