Saltar al contenido

¿Cuál es una alternativa a execfile en Python 3?

Ya no busques más por otras páginas porque estás al espacio perfecto, tenemos la respuesta que quieres recibir sin liarte.

Solución:

Según la documentación, en lugar de

execfile("./filename") 

Usar

exec(open("./filename").read())

Ver:

  • Novedades en Python 3.0

Se supone que solo debe leer el archivo y ejecutar el código usted mismo. 2to3 actual reemplaza

execfile("somefile.py", global_vars, local_vars)

como

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

(La llamada de compilación no es estrictamente necesaria, pero asocia el nombre del archivo con el objeto de código, lo que facilita un poco la depuración).

Ver:

  • http://docs.python.org/release/2.7.3/library/functions.html#execfile
  • http://docs.python.org/release/3.2.3/library/functions.html#compile
  • http://docs.python.org/release/3.2.3/library/functions.html#exec

Tiempo exec(open("filename").read()) a menudo se da como una alternativa a execfile("filename")se pierden detalles importantes que execfile soportado.

La siguiente función para Python3.x es lo más cerca que pude llegar a tener el mismo comportamiento que ejecutar un archivo directamente. Eso coincide con correr python /path/to/somefile.py.

def execfile(filepath, globals=None, locals=None):
    if globals is None:
        globals = 
    globals.update(
        "__file__": filepath,
        "__name__": "__main__",
    )
    with open(filepath, 'rb') as file:
        exec(compile(file.read(), filepath, 'exec'), globals, locals)

# execute the file
execfile("/path/to/somefile.py")

Notas:

  • Utiliza lectura binaria para evitar problemas de codificación
  • Garantizado para cerrar el archivo (Python3.x advierte sobre esto)
  • define __main__algunos scripts dependen de esto para verificar si se están cargando como un módulo o no, por ejemplo. if __name__ == "__main__"
  • Ajuste __file__ es mejor para los mensajes de excepción y algunos scripts usan __file__ para obtener las rutas de otros archivos relativos a ellos.
  • Toma argumentos globales y locales opcionales, modificándolos en el lugar como execfile hace, por lo que puede acceder a cualquier variable definida leyendo las variables después de ejecutar.

  • A diferencia de Python2 execfile esto hace no modificar el espacio de nombres actual de forma predeterminada. Para eso tienes que pasar explícitamente globals() & locals().

Te mostramos reseñas y calificaciones

Acuérdate de que te brindamos la opción de añadir una puntuación correcta si encontraste tu dilema justo a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *