gpt4 book ai didi

Java Processbuilder 流转 Python 脚本

转载 作者:行者123 更新时间:2023-11-30 07:37:16 26 4
gpt4 key购买 nike

我正在尝试做的一个小项目遇到了一个小问题。我正在尝试使用 Java 程序调用 Python 脚本。

Java:

ProcessBuilder pb = new ProcessBuilder("python3", "tmp.py");
process = pb.start();

OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));

writer.write("example" + "\n");

String output = reader.readLine();

Python 脚本 tmp.py(示例):

import sys

sys.stdin.readline()
print("Hello World")

它不会终止,似乎是因为 sys.sdin.readline() 没有捕获任何输入,如果我删除这一行,它就会正常终止。(stderror 也是空的)我尝试了不同的方法来解决这个问题,但似乎没有任何效果。

我真的很感激任何建议。提前致谢。

(更新:我尝试修改 Java 程序以访问 .jar 文件而不是 Python 脚本,但这里发生了相同的错误。使用 Python 方法 subprocess.Popen() 访问脚本但是工作正常很好。)

最佳答案

确保以 -u flag 启动无缓冲的 python :

Force the binary layer of the stdout and stderr streams (which is available as their buffer attribute) to be unbuffered. The text I/O layer will still be line-buffered if writing to the console, or block-buffered if redirected to a non-interactive file.

编辑

我仍然建议检查缓冲。无缓冲的 python 是一种常见的,但您可能仍然有一些缓冲。确保刷新 java writer,writer.flush()

关于Java Processbuilder 流转 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com