【发布时间】:2021-07-01 04:22:40
【问题描述】:
我对 Java 和 Python 都很陌生,尽管我有一些编程经验。对于作业,我需要创建一个以某种方式使用 Java 的程序。我的项目将使用 Java 作为 UX,使用 Python 进行信号处理和特征提取,因为它有一些很好的工具。 但是,我的问题是如何在两个程序之间建立通信。可能以前有人问过这个问题,但由于我不知道最好的术语,所以我找不到答案。
在我的 Java 程序中,我可以获取 .csv 文件的文件路径,将其发送到 Python,Python 返回原始信号和处理后的信号。为此,我写道:
private static void sendPython(String path, JTextField console)
{
String pathPython = "C:\\Users\\gonca\\Desktop\\untitled0.py";
String [] cmd = new String[3];
cmd[0] = "python";
cmd[1] = pathPython;
cmd[2] = path;
Runtime r = Runtime.getRuntime();
try
{
Process p = r.exec(cmd);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String s = "";
while((s = in.readLine()) != null)
{
console.setText(s);
}
}
catch (IOException e)
{
console.setText("Unable to run python script");
}
}
我正在考虑让 py 脚本在单独的行中输出信号,值由“,”或“;”分隔,并使用 BufferedRead 读取每一行,分离值并从分离的价值观。 但是,在开始更加努力地做这件事之前,我想知道这是否是最好的方法,或者有没有更有效的方法。
【问题讨论】:
-
一般建议:基于文件的通信通常很慢,因为文件通常存储在存储驱动器(HDD 或 SSD)上。您可以使用 sockets 来启用相当快速且可移植的 进程间通信。如果您想要更快的性能,您可以使用 shared-memory,但对于大多数工作负载而言,套接字通常足够快。
-
@JérômeRichard 如果处理结果不需要保留在用户的单个会话之外,则此建议是有效的。持久存储的一个明显替代方案也是更强大的数据库,但这会带来复杂性,并且只有在您处理的不同方面之间存在关系时才是必要的。
标签: java python frontend backend