¿Alternativa a ExecFile en Python 3? [duplicar
-
28-10-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- ¿Cuál es una alternativa a ExecFile en Python 3? 11 respuestas
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?
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