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!
Java Programm starten
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
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
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
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")
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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
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
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Tim!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")
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)
Code: Alles auswählen
ID: myfunction
Module Name: mymodule
Function Name: myfunction
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
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Sobald dieser Code einmal funktioniert und von Zope aus aufrufbar ist, dann sprechen wir über die Parameterübergabe.
mfg
Gerold
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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?)Wie kommst du denn da drauf?
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