Ausführen eines Skripts in Python
In diesem Artikel wird erläutert, wie wir Python verwenden können, um ein weiteres Python-Skript auszuführen.
Führen Sie ein Python-Skript in Python aus
Mit Hilfe der Funktion exec()
können wir ein Python-Skript mit Python ausführen. Die Funktion exec()
ist ein Python-Dienstprogramm, das die dynamische Ausführung von Python-Code sowohl im String- als auch im Byte-Format ermöglicht. Diese Funktion akzeptiert drei Argumente, nämlich
object
: Der Python-Code im String- oder Byte-Formatglobals
: Dies ist ein optionales Argument. Es ist ein Dictionary und enthält globale Funktionen und Variablen.locals
: Dies ist ein optionales Argument. Es ist ein Dictionary und enthält lokale Funktionen und Variablen.
Ein Beispiel finden Sie im folgenden Code.
file_name = "code.py"
content = open(file_name).read()
exec(content)
Der obige Code öffnet zuerst eine Datei im Arbeitsverzeichnis namens code.py
, liest deren Inhalt, speichert sie in einer Variablen namens content
und übergibt dann den gelesenen Inhalt an exec()
Funktion. Der gelesene Inhalt ist Python-Code, und die Methode exec()
führt diesen Python-Code aus.
Wenn wir einige lokale oder globale Variablen haben, können wir sie in Wörterbüchern speichern und an das ausführbare Skript übergeben. Das Skript kann dann diese Variablen verwenden und den Code ausführen. Beachten Sie, dass das Hauptprogramm eine Ausnahme auslöst, wenn wir einige Funktionen innerhalb des ausführbaren Skripts verwenden, die wir nicht als globale Variable übergeben haben.
Der folgende Code zeigt dasselbe.
from random import randint
code = "print(randint(1, 6))"
exec(code, {}, {}) # Empty globals and locals
Ausgabe:
Traceback (most recent call last):
File "<string>", line 4, in <module>
File "<string>", line 1, in <module>
NameError: name 'randint' is not defined
Wenn globals
und locals
nicht an exec()
übergeben werden, werden die Anforderungen (um das Skript auszuführen) automatisch behandelt. Python ist schlau genug, um herauszufinden, welche Variablen oder Funktionen zum Ausführen des Skripts benötigt werden. Der folgende Code wird beispielsweise perfekt ohne Fehler ausgeführt.
from random import randint
code = "print(randint(1, 6))"
exec(code) # No globals or locals passed
Verwendung von globals
und locals
Wir können benutzerdefinierte Funktionen und importierte Funktionen innerhalb des ausführbaren Skripts erstellen, indem wir sie über globals
an die Funktion exec()
übergeben. Wie oben erwähnt, werden Ausnahmen ausgelöst, wenn diese Abhängigkeiten nicht gefunden werden.
Siehe den folgenden Code. Hier definieren wir eine benutzerdefinierte Funktion und importieren eine Funktion aus dem Paket random
. Dann werden beide Funktionen an die Funktion exec()
übergeben, die in einem Dictionary über den Parameter globals
verpackt ist.
from random import randint
def get_my_age():
return 19
globals = {"randint": randint, "get_my_age": get_my_age}
code = """
print(randint(1, 6))
print(get_my_age())
"""
exec(
code,
globals,
)
Ausgabe:
5 # It can be any number between 1 and 6, both inclusive
19
Aktuell werden diese Funktionen über den Parameter globals
übergeben. Wir können sie auch durch locals
weitergeben. Da die Funktion exec
keine Schlüsselwortargumente akzeptiert, müssen wir für globals
ein leeres Dictionary übergeben und locals
ausgeben.
from random import randint
def get_my_age():
return 19
locals = {"randint": randint, "get_my_age": get_my_age}
code = """
print(randint(1, 6))
print(get_my_age())
"""
exec(code, {}, locals)
Ausgabe:
2 # It can be any number between 1 and 6, both inclusive
19