簡體   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