Domanda

Questa domanda ha già una risposta qui:

Python 2 aveva la funzione incorporata execfile, che è stato rimosso in Python 3.0. Questa domanda discute le alternative per Python 3.0, ma alcuni Cambiamenti considerevoli sono stati fatti Da Python 3.0.

Qual è la migliore alternativa a execfile per Python 3.2, e versioni future python 3.x?

È stato utile?

Soluzione

Il 2to3 Lo script (anche quello in Python 3.2) sostituisce

execfile(filename, globals, locals)

di

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

Questa sembra essere la raccomandazione ufficiale.

Altri suggerimenti

execfile(filename)

può essere sostituito con

exec(open(filename).read())

che funziona in tutte le versioni di Python

In python3.x questa è la cosa più vicina che potrei inventare per eseguire direttamente un file, che corrisponde in esecuzione python /path/to/somefile.py.

Appunti:

  • Utilizza la lettura binaria per evitare i problemi di codifica
  • Garentheed per chiudere il file (Python3.x ne avverte)
  • definisce __main__, alcuni script dipendono da questo per verificare se si stanno caricando come modulo o meno per EG. if __name__ == "__main__"
  • ambientazione __file__ è più bello per i messaggi di eccezione e alcuni script usano __file__ Per ottenere i percorsi di altri file relativi ad essi.
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")

Standard runpy.run_path è un'alternativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top