Wie führe ich eine Datei im Python-Interpreter aus?

289

Ich versuche, eine Datei mit Python-Befehlen aus dem Interpreter heraus auszuführen.

BEARBEITEN: Ich versuche, Variablen und Einstellungen aus dieser Datei zu verwenden, um keinen separaten Prozess aufzurufen.

Adam Matan
quelle
2
OS-Modul, und ich überprüfe die anderen Antworten.
Adam Matan
2
Vorgeschlagenes os.system; Und gelöschte Antwort, als ich die EDIT las: - /
Lichtgesang

Antworten:

229

Verschiedene Wege.

Aus der Schale

python someFile.py

Drücken Sie im Leerlauf F5 .

Wenn Sie interaktiv tippen, versuchen Sie Folgendes: ( Nur Python 2 !)

>>> variables= {}
>>> execfile( "someFile.py", variables )
>>> print variables # globals from the someFile module

Verwenden Sie für Python3 :

>>> exec(open("filename.py").read())
S.Lott
quelle
10
pythonfunktioniert nicht, wenn Sie Python 3 ausführen, python3wird stattdessen verwendet.
pzkpfw
41
Execfile existiert in python3 nicht mehr und exec () scheint irgendwie nicht zu funktionieren ... nicht sicher, was ich falsch mache. Könnten Sie die Antwort aktualisieren?
temporärer_Benutzername
Gibt es eine Möglichkeit, stdinaus einer Datei wie mit <dem ausführenden Skript in der execfile(). bereitzustellen ? @ s-lott
Bhanu
9
@pzkpfw Python kann auf jede Version von Python verweisen. Ich habe Umgebungen gesehen mit nur Python v3 , wo pythonPunkte zu python3.
StockB
2
@pzkpfw Das hängt davon ab, welche pythonausführbare Datei das System beim Durchsuchen der Ordner in der Umgebungsvariablen findet PATH.
HelloGoodbye
254

Für Python 2:

>>> execfile('filename.py')

Für Python 3:

>>> exec(open("filename.py").read())
# or
>>> from pathlib import Path
>>> exec(Path("filename.py").read_text())

Siehe die Dokumentation . Wenn Sie Python 3.0 verwenden, lesen Sie diese Frage .

In der Antwort von @ S.Lott finden Sie ein Beispiel dafür, wie Sie nach der Ausführung von Dateiname.py auf Globals zugreifen.

Codeape
quelle
Was macht die Lesemethode? Leider bietet die offizielle Dokumentationsseite kein klares Beispiel und keine Erklärung.
Dmitry
Es liest die Datei und gibt (standardmäßig) den gesamten Inhalt in einer einzigen Zeichenfolge zurück, siehe z. B. w3schools-Seite zum Öffnen der Datei .
Max
Hier sind die Dokumente für open (): docs.python.org/3/library/io.html
codeape
96

Python 2 + Python 3

exec(open("./path/to/script.py").read(), globals())

Dadurch wird ein Skript ausgeführt und alle globalen Variablen in den globalen Bereich des Interpreters eingefügt (das normale Verhalten in den meisten Skriptumgebungen).

Python 3- execDokumentation

Waylon Flinn
quelle
1
Sie sind mein Held! Ich habe tagelang mit einigen wirklich seltsamen Sachen gekämpft, in denen os.getcwd () eine Sache sagte, aber glob ("*") in einem anderen Verzeichnis arbeitete ... Danke! Danke dir!
Pallevillesen
Gibt es eine Möglichkeit, einen Parameter an das Skript zu übergeben? Folgendes funktioniert nicht: exec (öffne "setup.py install"). read (), globals ())
ben
1
@ben das funktioniert nicht, weil opender Code direkt aus dem Skript gelesen wird. Um Argumente zu übergeben, schauen Sie sich diese Antwort an , aber verwenden Sie stattdessen execfileoffensichtlich execund openwie oben gezeigt.
Nico
47

Überrascht habe ich das noch nicht gesehen. Sie können eine Datei ausführen und den Interpreter nach Beendigung der Ausführung offen lassen, indem Sie die folgende -iOption verwenden:

| foo.py |
----------
testvar = 10

def bar(bing):
  return bing*3

--------



$ python -i foo.py
>>> testvar 
10
>>> bar(6)
18
Bennett Talpers
quelle
30

Ich versuche, Variablen und Einstellungen aus dieser Datei zu verwenden, um keinen separaten Prozess aufzurufen.

Wenn Sie die Datei einfach mit import filename(minus .py, muss sich im selben Verzeichnis oder in Ihrem Verzeichnis befinden PYTHONPATH) importieren , wird die Datei ausgeführt und ihre Variablen, Funktionen, Klassen usw. werden im filename.variableNamespace verfügbar gemacht .

Wenn Sie also cheddar.pymit der Variablen Spam und der Funktion Eier haben - Sie können sie mit importieren import cheddar, auf die Variable mit zugreifen cheddar.spamund die Funktion durch Aufrufen ausführencheddar.eggs()

Wenn Sie Code cheddar.pyaußerhalb einer Funktion haben, wird dieser sofort ausgeführt, aber das Erstellen von Anwendungen, die beim Import ausgeführt werden, erschwert die Wiederverwendung Ihres Codes. Wenn alles möglich ist, fügen Sie alles in Funktionen oder Klassen ein.

mikl
quelle
4
Der globale Namespace wird nicht verwendet, wie es die Frage erfordert. Verwenden Sie stattdessenfrom filename import *
Ricardo Cruz
In der Frage wird die Verwendung eines globalen Namespace nicht ausdrücklich erwähnt. Dies ist möglicherweise das, was das OP wünscht, aber aus der Frage geht nichts hervor.
Ryanpcmcquen
13

Aus meiner Sicht ist der beste Weg:

import yourfile

und nach dem Ändern von yourfile.py

reload(yourfile)   

oder

import imp; 
imp.reload(yourfile) in python3

Dadurch sehen die Funktion und die Klassen jedoch folgendermaßen aus: yourfile.function1, yourfile.class1 .....

Wenn Sie diese nicht akzeptieren können, lautet die endgültige Lösung:

reload(yourfile)
from yourfile import *
Neo li
quelle
9

Ich bin kein Experte, aber Folgendes ist mir aufgefallen:

Wenn Ihr Code beispielsweise mycode.py ist und Sie nur 'mycode importieren' eingeben, führt Python ihn aus, stellt dem Interpreter jedoch nicht alle Variablen zur Verfügung. Ich fand, dass Sie tatsächlich 'from mycode import *' eingeben sollten, wenn Sie dem Interpreter alle Variablen zur Verfügung stellen möchten.

carlos e orozco
quelle
3
Außerdem sollte es ein Kommentar sein, keine Antwort.
Adam Matan
9

Mach einfach,

from my_file import *

Stellen Sie sicher, dass Sie keine .py-Erweiterung hinzufügen. Wenn Ihre .py-Datei im Unterverzeichnis verwendet wird,

from my_dir.my_file import *
Shital Shah
quelle
Es scheint mir das eleganteste zu sein.
Massimiliano Kraus
8

Für Python3 verwenden Sie entweder mit xxxx = namevon yourfile.

exec(open('./xxxx.py').read())
AMG
quelle
8

Für Python 3:

>>> exec(open("helloworld.py").read())

Stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden, bevor Sie den Befehl ausführen.

Um eine Datei aus einem anderen Verzeichnis auszuführen, können Sie den folgenden Befehl verwenden:

with open ("C:\\Users\\UserName\\SomeFolder\\helloworld.py", "r") as file:
    exec(file.read())
Prashant Gonga
quelle
1

Angenommen, Sie möchten die folgenden Funktionen:

  1. Die Quelldatei verhält sich in Ihrem Debugger ordnungsgemäß (Dateiname wird im Stapel angezeigt usw.)
  2. __name__ == '__main__' ist True, daher verhalten sich Skripte ordnungsgemäß wie Skripte.

Die exec(open('foo.py').read())Fehlerfunktion 1 Die import fooStrategie schlägt die Funktion 2 fehl

Um beides zu bekommen, benötigen Sie Folgendes:

    source = open(filename).read()
    code = compile(source, filename, 'exec')
    exec(code)
user3667349
quelle