Java Programm starten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gast

Donnerstag 3. November 2005, 19:30

Hallo,
ich habe Python code, der auf einem Zope-server laeuft und ein Java Programm, was fuer mich screenshots macht, skaliert, speichert,...

Nun wuerde ich gerne aus dem Python code die Java Application starten (mit Parametern), also im Terminal saehe das so aus:

java TestClass parameter1 parameter2

Wie genau starte ich diese Programme in python? Gibt es eine Moeglichkeit herauszufinden wann sie beendet sind?

Vielen lieben Dank,
Tim

PS: Ich weiss dass es JPython gibt, aber ich will ja nicht die klassen selbst nutzen sondern nur ein Programm starten und wissen wann es beendet wurde... Danke!
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 3. November 2005, 19:53

Such mal im Forum nach subprocess...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 3. November 2005, 20:21

Hi Tim!

Um von Zope aus ein Programm zu starten, musst du eine "Externe Methode" erstellen. Zuerst im Dateisystem selbst und dann im Zope. Wie so etwas funktioniert, wird dir hier beschrieben:
http://www.zope.de/Members/vbachs/zbook/zbscriptingzope
Suche nach "Externe Skripte benutzen".

Am einfachsten startest du ein Programm von Python aus mit

Code: Alles auswählen

import os
os.system("pfad und programmname")
Dabei wird so lange gewartet, bis das Programm fertig ist. Das kann natürlich bei einer Webanwendung Probleme bereiten. Aber da du von einem Screenshot schreibst, glaube ich nicht, dass Zope in diesem Fall auf einem wichtigen Webserver läuft. :-)

Je nachdem wie zeitkritisch die Sache ist, gibt es natürlich auch andere Wege, die zum Ziel führen --> Subprocess, Threads, Programm als Dienst/Daemon starten, Rückmeldung eines länger laufenden Programms per XML-RPC, ...

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Donnerstag 3. November 2005, 21:30

Hallo,
erst einmal vielen Dank fuer die schnellen Tips.
Ich bin leider ein ziemlicher Zope/Python newbie (nicht absoluter programmier newbie, ich programmiere in Java, ProLog, Lisp, Pascal, etc)...

Wenn ich es nun also richtig verstehe, lege ich eine externe python datei an und benutze sie in Zope als externes skript. Diese externe Datei hat dann den Code der die Java datei ausfuerhren soll? Sieht diese Datei dann also ungefaehr so aus?

import os
os.system("java TestClass arg1 arg2")

oder geht so ein aufruf im terminal nicht mit einem externen skript?
Ich habe versucht die anwendung von subprocess zu verstehen,.. leider ohne erfolg.

Haette jemand evtl ein kleines Beispiel was zeigt wie man eine Java class datei extern startet und wartet bis sie zu ende ist?

Waere superklasse und wuerde mir echt helfen das alles besser zu verstehen.

Vielen Dank schonmal,
Gruesse
Tim
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 3. November 2005, 21:45

Anonymous hat geschrieben:Ich habe versucht die anwendung von subprocess zu verstehen,.. leider ohne erfolg.
Ja, das ist nicht so super einfach... Ich hatte im Wiki dazu was geschrieben, mit Beispiel...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 3. November 2005, 22:48

Anonymous hat geschrieben:Diese externe Datei hat dann den Code der die Java datei ausfuerhren soll? Sieht diese Datei dann also ungefaehr so aus?

import os
os.system("java TestClass arg1 arg2")
Hallo Tim!

Wie kommst du darauf? Der Link, den ich mitgeliefert habe, sollte es eigentlich erklären. OK, hier noch einer: http://www.dzug.org/Members/petra/plone ... buch-6-18/

Die Datei, die den Python-Code enthält, sollte ungefär so aussehen und in diesem speziellen Beispiel mymodule.py heißen.:

Code: Alles auswählen

import os

def myfunction(self):
    os.system("java TestClass arg1 arg2")

if __name__ == "__main__":
    # Testen
    myfunction(None)

Die Definition der "Extenen Methode" im Zope muss in diesem Fall so aussehen:

Code: Alles auswählen

ID: myfunction
Module Name: mymodule
Function Name: myfunction
Zuerst prüfst du mal, ob dieser Code auch wirklich funktioniert.

Falls du unter Windows nur Zope, aber kein Python installiert hast, musst du zuerst raus finden, wo sich deine Python.exe befinden.
Der Aufruf aus der Eingabeaufforderung sollte dann in etwa so aussehen:

Code: Alles auswählen

C:\Programme\Zope-2.8.4\bin\python.exe C:\Zope-Instance\Extensions\mymodule.py
Unter Linux brauchst du den Pfad zur python.exe nicht erst raus finden. Du kannst "python" ohne Pfad angeben. Dafür musst du den Pfad deiner Zope-Instanz finden. Diesen Pfad findest du am schnellsten über das Control_Panel im ZMI (http://localhost:8080/Control_Panel/manage_main).

Dieser Code, in "mymodule.py", muss funktionieren und dein Java-Programm ausführen. Ist das nicht der Fall, dann brauchst du noch nicht daran denken, die "Externe Methode" im Zope einzurichten.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 3. November 2005, 22:50

Sobald dieser Code einmal funktioniert und von Zope aus aufrufbar ist, dann sprechen wir über die Parameterübergabe. :wink:

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Freitag 4. November 2005, 00:33

Wie kommst du denn da drauf?
Naja, das hatte ich so herausgelesen.. war ja anscheinend auch richtig (jedenfalls in meinem Kopf). Die externe methode ist die, die das Java programm aufruft und das ist eine extra py datei (hatte ich das nicht auch so geschrieben?)

Werde den Code die Tage probieren, der Server steht in der Uni und von zu Hause kann ich da keine Dateien draufschieben.. ueber das Zope interface geht es ja anscheinend nicht..

Melde mich wieder wenn ich den codeschnipsel am Laufen habe.

1000 Dank erst einmal fuer die Tips und Muehe
Tim
Antworten