Ausführen eines Skripts in Python

Vaibhav Vaibhav 10 Oktober 2023
  1. Führen Sie ein Python-Skript in Python aus
  2. Verwendung von globals und locals
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-Format
  • globals: 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
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.