[Python] Script innerhalb von einem anderen ausführen
lima-city → Forum → Programmiersprachen → Python
abrufen
auslese
bad
beenden
code
einfacher import
entscheidende punkt
entsprechend abfangen
folgende voraussetzungen
forderung
gefunden url
gesamte ausgabe
glauben
import
interpreter
jemand
output
performance
url
weiterleiten
-
Hi limas
Ich suche eine Möglichkeit, innerhalb von einem Python-Script ein weiteres auszuführen. Dabei müssen folgende Voraussetzungen erfüllt werden:
• das Script darf keine Variablen des „Eltern“-Scripts verändern können und alle eigenen Variablen und Imports müssen nach dem Beenden des Scripts wieder automatisch aus dem Speicher gelöscht werden
• wenn es Überschneidungen in den Variablennamen gibt, dann dürfen diese trotzdem nicht überschrieben werden, z.B.:
1. Script:
a = 7
2. Script:
a = 5
Hier muss die Variable a innerhalb des 2. Scripts den Wert 5 haben, nach dem Beenden des 2. Scripts aber wieder den Wert 7.
• es darf kein neuer Python-Interpreter gestartet werden
• die gesamte Ausgabe des Scripts soll nicht auf stdout geschrieben werden, ich will sie danach abrufen können bzw. soll sie in eine Variable geschrieben werden
• Exceptions sollen abgefangen werden können
• das Script soll sich genau so verhalten, wie wenn es direkt aufgerufen wird, es soll also z.B. innerhalb des Scripts __name__ auf __main__ gesetzt sein, damit fällt z.B. ein einfacher import schon mal weg.
Ich hoffe, es kennt jemand eine Lösung.
LG cookies -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich bin kein Python-Entwickler, aber die Variable "a" jeweils als private deklarieren müsste doch funktionieren?
-
@trueweb: Ich glaube es geht ihm nicht nur um das a sondern um alle Variablen.
Folgende Lösung trifft alle deine Forderungen bis auf die, dass kein neuer Python Interpreter gestartet werden darf:
#env.py import sys, subprocess a = 7 print( "the outer a is %i" % a ) handle = subprocess.Popen( ['/usr/bin/python', '/tmp/bad.py'], stdout=subprocess.PIPE ) print( "the outer a is still %i" % a ) print( "and the subprocesses output is: " ) print( handle.communicate() )
#bad.py a = 5 print( 'The inner a is %i' % a ) print( 'foo' ) print( 'bar' ) if __name__ == '__main__': print( 'bang!' )
Die Alternatve wäre execfile() zu verwenden, aber da glaube ich nicht, dass man die Ausgaben entsprechend abfangen und dann noch an das Elternscript weiterleiten kann. -
bladehunter schrieb:
@trueweb: Ich glaube es geht ihm nicht nur um das a sondern um alle Variablen.
Ja, genau darum geht es mir.
bladehunter schrieb:
[…]
Folgende Lösung trifft alle deine Forderungen bis auf die, dass kein neuer Python Interpreter gestartet werden darf:
[…]
Das ist aber genau der entscheidende Punkt. Ich habe jetzt lange rumprobiert, aber mit dem Starten eines neuen Interpreters komme ich einfach nicht auf die nötige Performance.
Ich hab jetzt eine Möglichkeit für das Output-Buffering in Python gefunden. Wenn ich diesen einschalte, das Script über execfile() ausführe, ihn auslese und dann wieder abschalte, müsste ich nur noch das Problem mit den Variablen-Überschneidungen lösen.
Hat dazu vielleicht jemand eine Idee?
LG cookies -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage