Java Processbuilder 流式传输到 Python-脚本

Java Processbuilder Stream to Python-Script

我在尝试做一个小项目时遇到了一个小问题。 我正在尝试使用 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() 访问脚本但是工作正常。)

确保你开始 python 无缓冲 -u flag:

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 unbuffered 是一个常见的,但你可能还有一些缓冲。确保冲洗 java 作家,writer.flush().