Implementierung von Teilprogrammen [Java|Python]

Feeder

Bekanntes Mitglied
Hey,

ich habe in Java ein kleineres Spiel programmiert und möchte nun darin ein paar mathematische Features wie Splines und Bezierkurven implmentieren. Da Java für diese Zwecke mehr als ungeignet ist (ich werde gerne eines besseren belehrt), grief ich auf Python 3 zurück.

Num möchte ich, das Java einen Pythonprozess startet,ein beliebig großes Array aus Arrays mit 2 Zahlen hineingibt und wartet bis es eine Antwort in Form eines Arrays mit 4 Zahlen zurückbekommt.

Wichtig ist vielleicht ist, das ich eine Möglichkeit suche, den Pythoncode in eine .exe umzuwandeln.

Ich suche für beide Sprachen einen geeigneten Code.
Ich kenne mich noch nicht gut mit solchen Sachen aus:

Vermutlich muss ich einen Outputstream eröffnen, die Arrays übergeben, und den Pythonprozess vorher starten um auf diese Inputs "hören" zu können. Dann muss Python einen Outputstream eröffnen und Java [zeitgleich im selben Thread der GameLoop, alles andere wird Müll]
die Ergebnisse abwarten.

Allerdings habe ich keine Ahnung wie das nun konkret aussehen soll. Zudem weiß ich nicht wie die Kommunikation zwischen zwei Sprachen funktioniert. Wie müssen Daten weitergegeben werden? Welche Konventionen gibt es?

Mit freundlichen Grüßen
Suchty
 
Zuletzt bearbeitet:

Feeder

Bekanntes Mitglied
Hey,

danke für deine Antwort!
das wäre sicherlich eine Lösung aber gefallen tut sie mir nicht,da ich nicht jeden Zeilenumbruch einfügen will...
Ich würde schon gerne eine fertige .py öffnen bzw starten wollen...

Code:
def spline(o):
    splines = []
    f=[0,0,0,0]
    for i in range(0,len(o)-1,1):
        x1 = o[i][0]
        x2 = o[i+1][0]
        y1 = o[i][1]
        y2 = o[i + 1][1]

        a = [[x1**3,x1**2,x1,1],
             [x2**3,x2**2,x2,1],
             [3*x1**2,2*x1,1,0],
             [3*x2**2,2*x1,1,0]]
        b = [y1,y2,3*f[0]*x1**2+2*f[1]*x1+f[2],0]
        f = np.linalg.solve(a,b)
        splines.append(f)
    return splines
 
Zuletzt bearbeitet:

Robat

Top Contributor
Kannst du ja auch.
In dem Beispiel wird es nur so gemacht, dass die python-Datei erst erstellt wird und dann ausgeführt wird.
Wenn es deine Datei bereits gibt kannst du den ersten Schritt einfach weglassen.

Oder verstehe ich dich gerade falsch?
 

Feeder

Bekanntes Mitglied
Hey,

ja , die Möglichkeit ist mir auch gerade klar geworden.
Ich würde aber gerne Array weitergeben und das kann ich mir gerade nicht so Recht vorstellen...

Wäre das dann:

Java:
Process p = Runtime.getRuntime().exec("python test1.py "+arrayname);

Quellcode, siehe oben...

Und wie lese ich denn dann so ein Array aus?
 

Robat

Top Contributor
Die einzige Möglichkeit die mir einfallen würde wäre die einzelnen Elemente des Arrays zu übergeben und im python-Programm selbst dann wieder zu einem Array zu machen.
Mittels Jython gäbe es da bestimmt noch mehr Möglichkeiten .. müsstest du dich mal zu einlesen.
 

Feeder

Bekanntes Mitglied
Also das muss doch ohne weiteres machbar sein:

Java,Python
Programm öffnen;
OutputStream öffnen, Inputstream öffnen;
Outpur übergeben, Auf Input warten;
Inputstream öffnen,Input verarbeiten
Input warten, Outputstream öffnen und übergeben

...

Ich weiß halt bloß nicht wie :D
 

Robat

Top Contributor
Also was gehen würde (über die Process-Klasse) wäre sowas:

Python-Code:
PHP:
import argparse
parser = argparse.ArgumentParser(description="Process some integers.")
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='Some integers..')

args = parser.parse_args()
def f(x) : return x*2

value = list(map(f, args.integers))
print(value)

Java-Code
Java:
public static void main( String[] args ) throws IOException {
    final String pathToPythonProgramm = "path/to/programm.py";
    final int[][] data = { { 1, 2 }, { 3, 4 }, { 5, 6 } };

    String numberString = Arrays.deepToString(data).replaceAll("\\[|,|]", "");
    Process p = Runtime.getRuntime().exec(String.format("python %s %s", pathToPythonProgramm, numberString));

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

    String s = "";
    while ( ( s = stdInput.readLine() ) != null ) {
        System.out.println(s);
    }
}
Der Output davon wäre [2, 4, 6, 8, 10, 12]. Daraus könntest du dir ja theoretisch wieder dein Array zusammen basteln.
Das ist sicherlich nicht der schönste Weg den es gibt.. Vielleicht fällt ja anderen noch was besseres ein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
L rotateLeft implementierung Allgemeine Java-Themen 2
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Mutable objects und Implementierung von ChangeEvents Allgemeine Java-Themen 5
W Queue Implementierung Allgemeine Java-Themen 6
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
I TimSort - Sortieralgorithmus - Erklärung und Pseudocode - Implementierung Allgemeine Java-Themen 2
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
ruutaiokwu burstsort-implementierung in java? Allgemeine Java-Themen 2
D Implementierung einer Mehrsprachigkeit, wichtig ? Allgemeine Java-Themen 5
D Implementierung einer Rechteverwaltung Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
R "Countdown" Implementierung Allgemeine Java-Themen 5
K A*-Implementierung flexibler machen Allgemeine Java-Themen 4
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S BlueJ Cäsar-Implementierung Allgemeine Java-Themen 6
S Implementierung Programmneustart Allgemeine Java-Themen 10
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
S Implementierung einer PluginArchitektur Allgemeine Java-Themen 5
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
V Wie finde ich die konkrete Implementierung? Allgemeine Java-Themen 8
G Implementierung vom AKS-Test Allgemeine Java-Themen 11
R software implementierung Allgemeine Java-Themen 3
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
K Design / Implementierung Allgemeine Java-Themen 5
B jre browser implementierung ? Allgemeine Java-Themen 4
B Elegantere Lösung bei der Implementierung eines Interfaces Allgemeine Java-Themen 2
G Klasse Queue Implementierung in Java Allgemeine Java-Themen 4
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben