Python-Code mit Java ausführen

Bitte aktiviere JavaScript!
Moin,
ich glaube ich bin zwar im falschen Forum, weiß aber auch nicht so recht wo es besser hinpasst.

Also ich habe ein ziemlich großes Programm mit dem Raspberry Pi in arbeit und mein "Hauptprogramm" ist in Java geschrieben aber für viele Sensoren(eigentlich alle) ist es sehr umständlich diese in Java zu schreiben, im Gegensatz zu Python.

Ich möchte also Python Code in mein Java Programm einbinden. Meine Frage nun wie mache ich das am besten?

Also Ideal fände ich es eine eigene Java Bibliothek zu schreiben in der in Modulen/Files der Python Code ebenfalls vorhanden ist und sich aufrufen lässt.

Hat jemand Ideen für mich?

Mit freundlichen Grüßen

Smierx
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Etwas hat es mir weitergeholfen. Ich habe die jython Bibliothek in mein Projekt importiert.
Code:
import Adafruit_DHT

sensor = Adafruit_DHT.DHT22

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
Ist mein Python Code.

Ich will mit einer Java Klasse nun diesem Code die Variable pin übergeben und die Lutfeuchtigkeit/Temperatur erhalten
 
MMn in dem Fall am einfachsten: das Python-Programm ganz normal (natürlich aus Java heraus) ausführen und mit diesem über Argumente/STDIN und STOUT kommunizieren.

In Java kannst du dafür ProcessBuilder nutzen, in Python einfach ganz normale ein/ausgabe
 
Java:
public class Scripting {
  public static void main(String[] args) {
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("python");

    int pin = 4;
    engine.put("pin", list1);
    String code =
      "import Adafruit_DHT\n"
      + "sensor = Adafruit_DHT.DHT22\n"
      + "humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)\n";
    try {
      engine.eval(code);
      System.out.println(engine.get("humidity"));
      System.out.println(engine.get("temperature"));
    }
    catch (ScriptException se) {
      se.printStackTrace();
    }
  }
}
 
Danke @tommysenf
wo kommt list1 weg? also wenn ich den code kopiere fehlt die Variable
und beim ausführen der Methode(habe den code etwas umgeschrieben) bekomme ich etliche fehlermeldungen
Code:
 public void Scripting() {
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("python");
    String abc = null;
    int pin = 4;
    engine.put("pin", abc);
    String code =
      "import Adafruit_DHT\n"
      + "sensor = Adafruit_DHT.DHT22\n"
      + "humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)\n";
    try {
      engine.eval(code);
      System.out.println(engine.get("humidity"));
      System.out.println(engine.get("temperature"));
    }
    catch (ScriptException se) {
      se.printStackTrace();
    }
  }
@mrBrown Also das mit Input Stream funktioniert, wenn im python file die Variable angegeben ist.
Aber mir etwas die Methoden von Inputstream angeguckt aber komme nicht drauf wie ich dem file eine Variable übergeben kann wenn diese nicht in dem Python file initialisiert ist?
 
@tommysenf Dann spuckt er mir nur noch ImportError:No module Named Adafruit aus
muss ich das Modul evtl wo anders abspeichern als in meinem /home/pi wenn ich es so wie oben benutzen will?
 
@mrBrown Also das mit Input Stream funktioniert, wenn im python file die Variable angegeben ist.
Aber mir etwas die Methoden von Inputstream angeguckt aber komme nicht drauf wie ich dem file eine Variable übergeben kann wenn diese nicht in dem Python file initialisiert ist?
In Java kannst du von einem InputStream nur lesen, das ist normal.
Du kannst aber dem Python-Skript beim Start Argumente übergeben (https://www.tutorialspoint.com/python/python_command_line_arguments.htm) oder einen OutputStream öffnen, und diesen aus Java füllen und in Python als Standardeingabe lesen.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben