Java i wykonywanie z jego poziomku skryptu Pythona ?

0

Zastanawiam się nad kwestią napisaną w tytule wpisu - czy połączenie Javy i Pythona zda egzamin?

Mam taką sytuację - chciałbym przygotować część programu (przede wszystkim GUI) przy pomocy JavaFX i do tego 'podpiąć' część programu (skrypt) napisanego w Pythonie. Skrypt ten jest napisany dla Pythona 3.4. Wiem, że istnieje coś takiego jak Jython, ale tam jest chyba wsparcie dla pythona wersji 2.

Z tego, co znalazłem wynika, że do wykonania tego zadania wystarczy, że wykorzystam, z dostarczanych przez Javę, metody klasy Process.. Przykład może wyglądać tak:

// https://stackoverflow.com/questions/26171862/java-processbuilder-not-able-to-run-python-script-in-java
package text_clustering;

import java.io.*;

public class Similarity {

    /**
     * 
     * @param args
     * 
     */
    public static void main(String[] args){
        try{
            String pythonPath = "C:/Machine_Learning/Text_Analysis/Ontology_based.py";
            //String pythonExe = "C:/Users/AppData/Local/Continuum/Anaconda/python.exe";
            ProcessBuilder pb = new ProcessBuilder(Arrays.asList("<Absolute Path to Python>/python", pythonPath));
            Process p = pb.start();

            BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = "";
            System.out.println("Running Python starts: " + line);
            int exitCode = p.waitFor();
            System.out.println("Exit Code : "+exitCode);
            line = bfr.readLine();
            System.out.println("First Line: " + line);
            while ((line = bfr.readLine()) != null){
                System.out.println("Python Output: " + line);
            }

        }catch(Exception e){System.out.println(e);}
    }
}

Sam jeszcze tego nie testowałem, bo brakuje mi kilka elemetów, jednakże chciałem się zapytać czy ktoś z Was miał okazję łączyć Javę i Pythona ?

1

Generalnie Jython (oraz pyJNIus) są ok jak chcesz z poziomu pythona korzystać z javowego API. Jak chcesz po prostu odpalic skrypt pythona to nie ma sensu kombinować. Ale jeśli chcesz potem coś z tego skryptu dostać to zastanowiłym się jednak nad Jythonem.

0

Ogólnie zrobiłem test i z tego co widzę, raczej nie można nic innego zwrócić, ze skrytpu Pythona do Javy, niż string (np. zwrócenie wartości z funkcji nie przejdzie..). Zapewne właśnie Jython 'omija' ten problem, tylko nadal nie wiem jak to się ma z tym pythonem 3 i instalowaniem dodatkowych paczek do tego Jythona..

Ostatecznie widzę, że po odpowiednich zabiegach mógłbym zwrócić wartość jako string, chodź trochę to mało 'eleganckie' :P

0

ile ten skrypcik ma linijek?

0

@karolinaa - skrypt jeszcze nie jest ukończony, ale zawierał około 300 linii ("na oko"). Ale w tym przypadku chodzi o inną rzecz.. mianowicie Python posiada wiele dobrych narzędzi do text mining'u, który muszę wykonać.. zdefiniowałem wszystkie operacje, które będę musiał przeprowadzić na tekście i znalazłem do tego zadania wszystkie potrzebne biblioteki, właśnie w Pythonie..

1 użytkowników online, w tym zalogowanych: 0, gości: 1