Ejecutar un script en Python

Vaibhav Vaibhav 10 octubre 2023
  1. Ejecutar una secuencia de comandos de Python en Python
  2. Uso de globals y locals
Ejecutar un script en Python

Este artículo hablará sobre cómo podemos usar Python para ejecutar otro script de Python.

Ejecutar una secuencia de comandos de Python en Python

Podemos ejecutar un script de Python usando Python con la ayuda de la función exec(). La función exec() es una utilidad de Python que permite la ejecución dinámica de código Python tanto en formato de cadena como de byte. Esta función acepta tres argumentos, a saber,

  • object: el código Python en formato de cadena o byte
  • globals: Es un argumento opcional. Es un diccionario y contiene funciones y variables globales.
  • locals: es un argumento opcional. Es un diccionario y contiene funciones y variables locales.

Consulte el siguiente código para ver un ejemplo.

file_name = "code.py"
content = open(file_name).read()
exec(content)

El código anterior primero abre un archivo en el directorio de trabajo con el nombre de code.py, lee su contenido, lo almacena dentro de una variable con el nombre de content, y luego pasa el contenido leído al exec() función. El contenido leído es algo de código Python, y el método exec() ejecutará ese código Python.

Si tenemos algunas variables locales o globales, podemos almacenarlas dentro de los diccionarios y pasarlas al script ejecutable. El script podrá utilizar esas variables y ejecutar el código. Tenga en cuenta que si usamos algunas funciones dentro del script ejecutable que no hemos pasado como variable global, el programa principal arrojará una excepción.

El siguiente código describe lo mismo.

from random import randint

code = "print(randint(1, 6))"
exec(code, {}, {})  # Empty globals and locals

Producción :

Traceback (most recent call last):
  File "<string>", line 4, in <module>
File "<string>", line 1, in <module>
NameError: name 'randint' is not defined

Cuando los globals y locals no se pasan al exec(), los requisitos (para ejecutar el script) se manejan automáticamente. Python es lo suficientemente inteligente como para descubrir qué variables o funciones se necesitan para ejecutar el script. Por ejemplo, el siguiente código se ejecutará perfectamente sin ningún error.

from random import randint

code = "print(randint(1, 6))"
exec(code)  # No globals or locals passed

Uso de globals y locals

Podemos crear funciones personalizadas y funciones importadas dentro del script ejecutable pasándolas a la función exec() a través de globals. Como se mencionó anteriormente, si no se encuentran estas dependencias, se generarán excepciones.

Consulte el siguiente código. Aquí definiremos una función personalizada e importaremos una función del paquete random. Entonces ambas funciones se pasarán a la función exec() envuelta dentro de un diccionario a través del parámetro 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,
)

Producción :

5 # It can be any number between 1 and 6, both inclusive
19

En este momento, estas funciones se han pasado a través del parámetro globals. También podemos pasarlos por locals. Dado que la función exec no acepta argumentos de palabras clave, tenemos que pasar un diccionario vacío para globals y el pass out 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)

Producción :

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.