我希望在我的java应用程序和它通过代码调用的python脚本之间实现进程间通信
我们的想法是python脚本在无限循环中运行,接受输入,处理输入并在控制台中打印结果。
同时,java应用程序发送输入,等待python脚本处理它,并在python脚本完成处理时从控制台读取它(使用python进程中的InputStream
,为简洁起见省略)。如何实现这种沟通?
Java程序
import java.io.*;
public class JavaProgram {
public static void main(String[] args) throws IOException{
Process p = Runtime.getRuntime().exec("python pythonScript.py");
OutputStream os = p.getOutputStream();
os.write("Hello".getBytes());
os.close();
os = p.getOutputStream();
os.write("World".getBytes());
os.close();
os = p.getOutputStream();
os.write("quit".getBytes());
os.close();
}
}
Python脚本
def transformString(string):
return "Java said: " + string
file = open("writingFile.txt", "w+")
while True:
user_input = input('\n> ')
message = transformString(user_input)
if message == "quit":
break
file.write(message + "\n")
print(message + "\n")
file.write("closing file...\n")
file.close()
上面代码的问题是java app只能发送一次输入(只有" Hello"被发送),然后关闭输出流(尝试不关闭它)。我知道这是因为python脚本从未完成。
以下是文件writingFile.txt
:
Java said: Hello
*注意:python脚本启动一次非常重要,因为原始脚本的init方法非常耗时。 *第二个注意事项:python的处理方法也需要一些时间,所以我不知道如何告诉java程序何时应该开始读取输出。