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.
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 .
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).
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:
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.
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:
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.
Antworten:
Verschiedene Wege.
Aus der Schale
Drücken Sie im Leerlauf F5 .
Wenn Sie interaktiv tippen, versuchen Sie Folgendes: ( Nur Python 2 !)
Verwenden Sie für Python3 :
quelle
python
funktioniert nicht, wenn Sie Python 3 ausführen,python3
wird stattdessen verwendet.stdin
aus einer Datei wie mit<
dem ausführenden Skript in derexecfile()
. bereitzustellen ? @ s-lottpython
Punkte zupython3
.python
ausführbare Datei das System beim Durchsuchen der Ordner in der Umgebungsvariablen findetPATH
.Für Python 2:
Für Python 3:
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.
quelle
Python 2 + Python 3
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-
exec
Dokumentationquelle
open
der Code direkt aus dem Skript gelesen wird. Um Argumente zu übergeben, schauen Sie sich diese Antwort an , aber verwenden Sie stattdessenexecfile
offensichtlichexec
undopen
wie oben gezeigt.Ü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
-i
Option verwenden:quelle
Wenn Sie die Datei einfach mit
import filename
(minus .py, muss sich im selben Verzeichnis oder in Ihrem Verzeichnis befindenPYTHONPATH
) importieren , wird die Datei ausgeführt und ihre Variablen, Funktionen, Klassen usw. werden imfilename.variable
Namespace verfügbar gemacht .Wenn Sie also
cheddar.py
mit der Variablen Spam und der Funktion Eier haben - Sie können sie mit importierenimport cheddar
, auf die Variable mit zugreifencheddar.spam
und die Funktion durch Aufrufen ausführencheddar.eggs()
Wenn Sie Code
cheddar.py
auß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.quelle
from filename import *
Aus meiner Sicht ist der beste Weg:
und nach dem Ändern von yourfile.py
oder
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:
quelle
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.
quelle
Mach einfach,
Stellen Sie sicher, dass Sie keine .py-Erweiterung hinzufügen. Wenn Ihre .py-Datei im Unterverzeichnis verwendet wird,
quelle
Für Python3 verwenden Sie entweder mit
xxxx = name
vonyourfile
.quelle
Für Python 3:
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:
quelle
Angenommen, Sie möchten die folgenden Funktionen:
__name__ == '__main__'
ist True, daher verhalten sich Skripte ordnungsgemäß wie Skripte.Die
exec(open('foo.py').read())
Fehlerfunktion 1 Dieimport foo
Strategie schlägt die Funktion 2 fehlUm beides zu bekommen, benötigen Sie Folgendes:
quelle