Seite 1 von 1
pythonscript von einem anderen aufrufen
Verfasst: Donnerstag 22. April 2004, 15:48
von alpha
Hallo Leute,
mal wieder ne Frage von mir.
Kann ich ein Pythonscript von einem anderen Pyscript aufrufen und wenn ja wie?
ich würde das ja gerne mit popen machen, vertstehe aber das prinzip von dem popen immer noch nicht so richtig.
Wieso muss ich das zum Beispiel hier so ineinanderschachteln?
Ich meine die beiden popen in einer Zeile..???
Ausserdem mus ich mitbekommen, wenn in dem aufgerufenen
Script ein Fehler auftritt.
Würde mich über eine Antwort freuen, danke.
alpha
Verfasst: Donnerstag 22. April 2004, 16:05
von Dookie
Hi alpha,
wo hast du das
denn her?
sollte eigentlich wohl
Code: Alles auswählen
import os
ch_out,ch_in,ch_err = os.popen3('ping 127.0.0.1')
heissen.
Du kannst ein Pythonscript auch einfach importieren, dann wird es auch ausgeführt, ausser der Teil der durch
nur im Falle, daß das Script direkt gestartet wurde ausgeführt wird.
Gruß
Dookie
Verfasst: Donnerstag 22. April 2004, 18:02
von Milan
Dookie hat geschrieben:wo hast du das
denn her?
Hi. Dass stammt wohl von mir hier aus dem Forum, als ich noch popen2 benutzt habe... popen2 ist ein Modul, dass dieselbe Funktion bereithält, allerdings die Pipes in anderer Reihenfolge zurückgibt. Der Vorteil ist, dass unter Linux Popen3 und Popen4 als Klassen bereitstehen und man davon ableiten kann.
Und Fehler kannst du aus ch_err auslesen. Würde ich auch zuerst machen, bevor ich ch_out auslese...
Milan
geht nicht
Verfasst: Freitag 23. April 2004, 08:09
von alpha
Hallo,
ich habe es jetzt ausprobiert und leider funktioniert
popen3 wohl nur bei nicht python Programmen.
Ich kann damit den notepad, nicht aber den Pythoninterpreter
starten.
folgende Zeile geht:
diese dagegen nicht:
Code: Alles auswählen
ch_out,ch_in,ch_err = os.popen3("c:\programme\python23\python.exe")
Wie kann das sein???
Gruß
alpha
kein import möglich
Verfasst: Freitag 23. April 2004, 08:55
von alpha
Noch ein Nachtrag...
Import geht nicht, da ich von dem einen Script erst das andere
modifizieren will und danach starten...
alpha
noch ein nachtrag
Verfasst: Freitag 23. April 2004, 09:18
von alpha
Habe weiter herumexperimentiert...
Hier noch ein Phänomen:
C:\vss\vlo\opc-client>starter.py
<open file 'notepad.ex', mode 'w' at 0x007E8FA0>
<open file 'notepad.ex', mode 'r' at 0x007EC7A0>
<open file 'notepad.ex', mode 'r' at 0x007EC9A0>
C:\vss\vlo\opc-client>starter.py
<open file 'notepad.exe', mode 'w' at 0x007E8FA0>
<open file 'notepad.exe', mode 'r' at 0x007EC7A0>
<open file 'notepad.exe', mode 'r' at 0x007EC9A0>
Dies ist die Konsolenausgabe, die ich eben bekommen habe.
Wieso bekomme ich die gleichen Rückgabewerte von
popen3 obwohl das File oben (notepad.ex) ganz bestimmt nicht
existiert. Ich hätte jetzt hier einen Fehler erwartet.
alpha
Re: kein import möglich
Verfasst: Freitag 23. April 2004, 15:17
von Milan
alpha hat geschrieben:Noch ein Nachtrag...
Import geht nicht, da ich von dem einen Script erst das andere modifizieren will und danach starten...
Hi. Das ist in meinen Augen kein Argument, denn normalerweise sollte man statt so zu modifizieren, besser mit paramentern auskommen, dann ist das nicht nötig. Beschreib daher bitte mal genauer, was du vorhast.
Und: selbst wenn modifiziert werden müsste, würde das auch so gehen, dann halt einfach nach dem modifizieren importieren, bzw wenn schon gemacht reload(modul) benutzen.
Und: auch das Python ausführen geht, du musst halt nur angeben, was er ausführen soll...
Code: Alles auswählen
>>> o,i,e=popen2.popen3('c:\python23\python.exe c:\Temp\\test.py')
>>> o.read()
'[1, 2, 3]\n'
@Dookie: ist mir gerade aufgefallen: wenn man os statt popen2 benutzt, muss mann auch die Reihenfolge der Ausgabepipes ändern. Es muss
ch_in,ch_out,ch_err = os.popen3('ping 127.0.0.1') heißen.
Milan
Verfasst: Freitag 23. April 2004, 15:21
von Dookie
Hi Milan,
hab ich auch gerade bemerkt
Gruß
Dookie
was ich möchte
Verfasst: Sonntag 25. April 2004, 08:11
von alpha
Ich habe vor ein script von einem anderen aus zu starten. Dieses
soll mitbekommen wenn das zu startende Script einen Fehler hat, damit
ich diesen dem Benutzer mitteilen kann. Der Benutzer schreibt dieses 2.Script. Es soll so von mir sichergestellt werden, daß mein Programm
nicht hängenbleibt, wenn der benutzer ein falsches "Rezeptscript" (das in Python geschrieben ist) erstellt hat. Ich muß ihm also möglicht genau mitteilen wo sein Fehler ist. Am einfachsten wäre es natürlich wenn ich an den Pythonfehlertext rannkäme.
Ich hoffe meine Problematik ist jetzt etwas klarer.
Grüsse und schonmal danke für dei Antworten.
alpha
Verfasst: Sonntag 25. April 2004, 10:50
von Milan
Hi. Dann spricht doch nix gegen ein popen. Ich wäre aber zu faul, den Path zum Interpreter jedesmal neu rauszusuchen und würde eher das hier machen:
Code: Alles auswählen
import sys,traceback
scripttext="""print unbekannt""" #Das ist das Script, das gespeichert und ausgeführt werden soll.
scriptname="test"
datei=file("%s.py"%scriptname,"w")
datei.write(scripttext)
datei.close()
try:
execfile("%s.py"%scriptname)
except:
t=sys.exc_info()
text=("").join(traceback.format_exception(t[0],t[1],t[2]))
print "Es gab einen Fehler:"
print text
else:
print "Es gab keinen Fehler"
Damit fängst du alle vorkommenden Fehler ab und kannst sie bequem formatiert ausgeben.
Milan
Verfasst: Sonntag 25. April 2004, 14:08
von alpha
Danke milan, das werde ich doch gleich mal ausprobieren, lass dich dann
wissen wie es lief:-)
alpha
Verfasst: Montag 26. April 2004, 07:31
von alpha
Hallo Milan,
alles klar, es scheint zu funktionieren. Jetzt verstehe ich nur noch nicht
was das
"%s.py"%scriptname..
in der Zeile
macht. Speziell das %-Zeichen verstehe ich nicht in diesem Zusammenhang. Vieleicht kannst Du mir da noch auf die Sprünge helfen.
Ansonsten vielen Dank für die tolle Hilfe
alpha
Verfasst: Montag 26. April 2004, 10:16
von Dookie
Hi alpha,
probiers doch einfach in der Konsole aus.
Code: Alles auswählen
>>> scriptname = "Test"
>>> print "%s.py"%scriptname
Test.py
Gruß
Dookie