java - 将 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", "-u",
"path/to/script.py", args_filepath).inheritIO();
推荐阅读
- android - 是否有任何 Android 通知 setContentTitle 和 setContextText 魔法值?
- java - 如何使用具有使用 java 流的属性的不同对象的列表来创建不同对象的列表
- reactjs - 我想对 usestate 或其他钩子做出反应。实施 60 秒倒计时。如何
- php - LARAVEL 调用未定义的方法 Illuminate\Database\Eloquent\Builder::splice()
- java - 我想要图像,然后是文本视图,然后是声音.. android studio
- node.js - 猫鼬更新时没有报错,但是不更新
- docker - 使用 docker 和 nginx 在 5000 端口部署静态网站
- c# - 获取 JSON 中指定的错误解析类型
- flutter - Flutter 错误:无法加载我的音频资产
- java - 滚动整个片段,里面有片段