Exécuter un script en Python
Cet article expliquera comment nous pouvons utiliser Python pour exécuter un autre script python.
Exécuter un script Python en Python
On peut exécuter un script Python à l’aide de Python à l’aide de la fonction exec()
. La fonction exec()
est un utilitaire Python qui permet l’exécution dynamique de code Python à la fois au format chaîne et octet. Cette fonction accepte trois arguments, à savoir,
object
: Le code Python au format chaîne ou octetglobals
: C’est un argument optionnel. C’est un dictionnaire et contient des fonctions et des variables globales.locals
: C’est un argument optionnel. C’est un dictionnaire et contient des fonctions et des variables locales.
Référez-vous au code suivant pour un exemple.
file_name = "code.py"
content = open(file_name).read()
exec(content)
Le code ci-dessus ouvre d’abord un fichier dans le répertoire de travail sous le nom de code.py
, lit son contenu, le stocke dans une variable portant le nom contenu
, puis passe le contenu lu à exec()
fonction. Le contenu lu est du code Python, et la méthode exec()
exécutera ce code Python.
Si nous avons des variables locales ou globales, nous pouvons les stocker dans des dictionnaires et les transmettre au script exécutable. Le script pourra alors utiliser ces variables et exécuter le code. Notez que si nous utilisons certaines fonctions dans le script exécutable que nous n’avons pas passées en tant que variable globale, le programme principal lancera une exception.
Le code suivant décrit la même chose.
from random import randint
code = "print(randint(1, 6))"
exec(code, {}, {}) # Empty globals and locals
Production :
Traceback (most recent call last):
File "<string>", line 4, in <module>
File "<string>", line 1, in <module>
NameError: name 'randint' is not defined
Lorsque les globals
et locals
ne sont pas passés à exec()
, les exigences (pour exécuter le script) sont automatiquement gérées. Python est suffisamment intelligent pour déterminer toutes les variables ou fonctions nécessaires à l’exécution du script. Par exemple, le code suivant s’exécutera parfaitement sans aucune erreur.
from random import randint
code = "print(randint(1, 6))"
exec(code) # No globals or locals passed
Utilisation de globals
et locals
Nous pouvons créer des fonctions personnalisées et des fonctions importées à l’intérieur du script exécutable en les passant à la fonction exec()
via globals
. Comme mentionné ci-dessus, si ces dépendances ne sont pas trouvées, des exceptions seront levées.
Référez-vous au code suivant. Ici, nous allons définir une fonction personnalisée et importer une fonction du package random
. Ensuite, les deux fonctions seront passées à la fonction exec()
enveloppée dans un dictionnaire via le paramètre globals
.
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,
)
Production :
5 # It can be any number between 1 and 6, both inclusive
19
Pour l’instant, ces fonctions ont été passées via le paramètre globals
. On peut aussi les faire passer par des locaux
. Puisque la fonction exec
n’accepte pas les arguments de mot-clé, nous devons passer un dictionnaire vide pour globals
et passer locals
.
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)
Production :
2 # It can be any number between 1 and 6, both inclusive
19