【发布时间】:2020-12-28 17:02:13
【问题描述】:
我在将 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。
【问题讨论】:
-
你认为
inheritIO()做了什么,你为什么相信? --- 你认为p.getInputStream()在继承 I/O 时会做什么,你为什么相信? 提示: "如果子进程的标准输出已使用 ProcessBuilder.redirectOutput 重定向,那么此方法将返回 null 输入流。"
标签: java python processbuilder