Pregunta

Esta pregunta ya tiene una respuesta aquí:

Python 2 tenía la función construida execfile, que fue eliminado en Python 3.0. Esta pregunta discute alternativas para Python 3.0, pero algunas cambios considerables ha sido hecho Desde Python 3.0.

¿Cuál es la mejor alternativa a execfile para Python 3.2 y futuras versiones de Python 3.x?

¿Fue útil?

Solución

los 2to3 Script (también el de Python 3.2) reemplaza

execfile(filename, globals, locals)

por

exec(compile(open(filename, "rb").read(), filename, 'exec'), globals, locals)

Esta parece ser la recomendación oficial.

Otros consejos

execfile(filename)

se puede reemplazar con

exec(open(filename).read())

que funciona en todas las versiones de Python

En python3.x, esto es lo más cercano que se me ocurrió para ejecutar un archivo directamente, que coincide con la ejecución python /path/to/somefile.py.

Notas:

  • Utiliza lectura binaria para evitar la codificación de problemas
  • Garenteaed 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 para EG. if __name__ == "__main__"
  • ajuste __file__ es más agradable para mensajes de excepción y se usan algunos scripts __file__ Para obtener las rutas de otros archivos en relación con ellos.
def exec_full(filepath):
    import os
    global_namespace = {
        "__file__": filepath,
        "__name__": "__main__",
    }
    with open(filepath, 'rb') as file:
        exec(compile(file.read(), filepath, 'exec'), global_namespace)

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

Estándar runpy.run_path es una alternativa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top