繁体   English   中英

如何在 Java 和 Python 之间创建 2 路通信

[英]How to create a 2 way communication between Java and Python

尽管我有一些编程经验,但我对 Java 和 Python 都很陌生。 对于作业,我需要创建一个以某种方式使用 Java 的程序。 我的项目将使用 Java 作为 UX,并使用 Python 进行信号处理和特征提取,因为它有一些很好的工具。 但是,我的问题是如何在两个程序之间建立通信。 也许以前有人问过这个问题,但是由于我不知道最好的术语,所以我找不到答案。

In my Java Program, I can get the file path to a.csv file, send it to Python, and Python returns the original signals and processed signals. 为此,我写道:

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 脚本 output 将信号放在分隔行中,值由“,”或“;”分隔,并使用 BufferedRead 读取每一行,分隔值并从分隔值创建一个新的 ArrayList。 但是,在开始更加努力地做到这一点之前,我想知道这是否是最好的方法,或者是否有更有效的方法来做到这一点。

还有更多方法可以做到这一点:

解决方案1:

将 java 中的 python 库与System.loadLibrary一起使用,并调用 python 方法。 (这里是一个使用 C/C++ 的例子: Calling a python method from C/C++, and extracting its return value

解决方案2:

启动 python 作为另一个进程,并使用 D-Bus(或类似的东西)与其通信。

由于您没有提到您的应用程序有多健壮,我可以想到一个解决方案,如果您正在规划更高级别的架构,可以使用该解决方案。

  1. 创建一个基于 python 的 web 应用程序(HTTP 服务器),其中包含处理文件的所有逻辑。
  2. 创建一个 java 应用程序,该应用程序可以通过 HTTP python 服务器进行通信以获取 ZCC8D68C551C4A9A6D53 信息3ED07 处理。

尽量避免在代码中运行时执行面向用户的命令,就好像它没有得到妥善管理一样,总是有可能出现安全漏洞

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM