Ich habe ein einfaches Skript blah.py (mit Python 2):
import sys
print sys.argv[1]
Wenn ich mein Skript ausführe durch:
python c:/..../blah.py argument
Es gibt ein Argument aus, aber wenn ich ein Skript ausführe von:
blah.py argument
Fehler tritt auf:
IndexError ...
Argumente werden also nicht an das Skript übergeben.
python.exe in PATH. Ordner mit blah.py auch in PATH.
python.exe ist das Standardprogramm zum Ausführen von * .py-Dateien.
Was ist das Problem?
Antworten:
Wenn Sie ein Skript ausführen, ohne vorher "Python" einzugeben, müssen Sie zwei Dinge darüber wissen, wie Windows das Programm aufruft. Zunächst müssen Sie herausfinden, um welche Art von Datei es sich bei Windows handelt:
Als nächstes müssen Sie wissen, wie Windows Dinge mit dieser Erweiterung ausführt. Es ist dem Dateityp "Python.File" zugeordnet, daher zeigt dieser Befehl, was er tun wird:
Wenn ich also auf meinem Computer "blah.py foo" eingebe, wird genau dieser Befehl ausgeführt, ohne dass sich die Ergebnisse unterscheiden, als wenn ich das Ganze selbst eingegeben hätte:
Wenn Sie dasselbe eingeben, einschließlich der Anführungszeichen, erhalten Sie identische Ergebnisse wie bei der Eingabe von "blah.py foo". Jetzt sind Sie in der Lage, den Rest Ihres Problems selbst herauszufinden.
(Oder veröffentlichen Sie weitere hilfreiche Informationen in Ihrer Frage, z. B. das tatsächliche Ausschneiden und Einfügen von Kopien dessen, was Sie in der Konsole sehen. Beachten Sie, dass Personen, die solche Dinge tun, ihre Fragen zur Abstimmung stellen und Reputationspunkte erhalten, sowie mehr Personen werden ihnen wahrscheinlich mit guten Antworten helfen.)
Eingebracht von Kommentaren:
Selbst wenn assoc und ftype die richtigen Informationen anzeigen, kann es vorkommen, dass die Argumente entfernt werden. In diesem Fall kann es hilfreich sein, die relevanten Registrierungsschlüssel für Python direkt zu reparieren. Stellen Sie die
Schlüssel zu:
Vermutlich
%*
fehlte zuvor. Ebenso einstellenauf den gleichen Wert. Siehe http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
Der Registry - Pfad kann variieren, Verwendungpython26.exe
oderpython.exe
oder je nachdem , was bereits in der Registrierung.HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
quelle
assoc
undftype
die richtigen Informationen angezeigt werden, kann es vorkommen, dass die Argumente entfernt werden. In diesem Fall kann es hilfreich sein, die relevanten Registrierungsschlüssel für Python direkt zu reparieren. Setzen Sie denHKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command
Schlüssel auf:"C:\Python26\python26.exe" "%1" %*
Wahrscheinlich%*
fehlte zuvor. Stellen SieHKEY_CLASSES_ROOT\py_auto_file\shell\open\command
den gleichen Wert ein. Siehe eli.thegreenplace.net/2010/12/14/…test.py 123
ich und werde123
gedruckt alssys.argv[1]
. Hat Microsoft etwas geändert?Sie sollten festlegen, dass die Standardanwendung für die Verarbeitung von Python-Dateien python.exe ist.
Klicken Sie mit der rechten Maustaste auf eine * .py-Datei und wählen Sie das Dialogfeld "Öffnen mit". Wählen Sie dort "python.exe" und aktivieren Sie "Dieses Programm immer für diesen Dateityp verwenden" (so ähnlich).
Dann werden Ihre Python-Dateien immer mit python.exe ausgeführt
quelle
Wenn Sie Ihre Python-Skripte ausführen möchten, ohne das
.py
(oder.pyw
) am Ende des Dateinamens einzugeben , müssen Sie der Liste der Erweiterungen in der Umgebungsvariablen PATHEXT.PY
(oder.PY;.PYW
) hinzufügen .In Windows 7:
Rechtsklick auf Computer
Linksklick Eigenschaften
Erweiterte Systemeinstellungen-Linksklick auf
die Registerkarte Erweitert-Linksklick auf
Umgebungsvariablen-links klicken ...
unter „Systemvariablen“ nach unten scrollen , bis Sie sehen PATHEXT
Linksklick auf PATHEXT markieren es
links- Klicken Sie auf Bearbeiten ...
Bearbeiten Sie "Variablenwert" so, dass er enthält
;.PY
(die End-Taste springt zum Ende).Klicken Sie mit der
linken Maustaste auf OK.
Klicken Sie mit der linken Maustaste auf OK. Klicken Sie mit der linken Maustaste auf OK
Hinweis 1: In Eingabeaufforderungsfenstern wird die Änderung nicht angezeigt, ohne dass sie geschlossen und erneut geöffnet wird.
Hinweis Nr. 2: Der Unterschied zwischen den Erweiterungen
.py
und.pyw
besteht darin, dass die erstere beim Ausführen eine Eingabeaufforderung öffnet und die letztere nicht.Auf meinem Computer habe ich
;.PY;.PYW
als letzte Erweiterung (niedrigste Priorität) hinzugefügt , sodass die Werte "vor" und "nach" von PATHEXT wie folgt lauten:Vor:
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
nach dem
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
Hier sind einige lehrreiche Befehle:
quelle
Sie könnten Pylauncher installieren . Es wird zum Starten von .py-, .pyw-, .pyc- und .pyo-Dateien verwendet und unterstützt mehrere Python-Installationen:
Sie können Ihr Python-Skript ausführen, ohne die Erweiterung .py anzugeben, wenn Sie in der Umgebungsvariablen PATHEXT .py, .pyw haben:
Es bietet Unterstützung für shebang (
#!
Kopfzeile), um die gewünschte Python-Version unter Windows auszuwählen, wenn Sie mehrere Versionen installiert haben. Sie können eine * nix-kompatible Syntax verwenden#! /usr/bin/env python
.Sie können die Version explizit angeben, z. B. um sie mit der neuesten installierten Python 3-Version auszuführen:
Es sollte auch Ihr
sys.argv
Problem als Nebeneffekt beheben .quelle
Ich bin auf dasselbe Problem gestoßen, aber im Zusammenhang mit der Notwendigkeit, meinen Code für Windows-Benutzer (von Linux) zu packen. Mein Paket enthält eine Reihe von Skripten mit Befehlszeilenoptionen.
Ich benötige diese Skripte, um an der entsprechenden Stelle auf den Computern der Windows-Benutzer installiert zu werden, damit sie sie über die Befehlszeile aufrufen können. Da das Paket angeblich benutzerfreundlich ist, ist es unmöglich, meine Benutzer zu bitten, ihre Registrierung zu ändern, um diese Skripte auszuführen.
Ich bin auf eine Lösung gestoßen, die die Mitarbeiter von Continuum für Python-Skripte verwenden, die mit ihrem Anaconda-Paket geliefert werden. Beispiele finden Sie in Ihrem Anaconda / Scripts-Verzeichnis.
test
Erstellen Sie für ein Python-Skript zwei Dateien: atest.bat
und atest-script.py
.test.bat
sieht wie folgt aus (die aufgerufenen.bat
Dateien mit einem relativen Pfad, den ich für meine Zwecke angepasst habe):Anaconda\Scripts
python.exe
test-script.py
ist dein eigentliches Python-Skript:Wenn Sie diese beiden Dateien in Ihrem lokalen Verzeichnis belassen, können Sie Ihr Python-Skript über die
.bat
Datei aufrufenWenn Sie beide Dateien an einen Speicherort kopieren, der sich auf Ihrem
PATH
(z. B.Anaconda\Scripts
) befindet, können Sie Ihr Skript sogar aufrufen, indem Sie das.bat
Suffix weglassenHaftungsausschluss: Ich habe keine Ahnung, was los ist und wie dies funktioniert, und würde mich über jede Erklärung freuen.
quelle
.bat
Wrappers für jedes Python-Skript ist umständlich und redundant. Ich würde das nicht empfehlen.Auf Windows - ,
Um ein Python-Modul auszuführen, ohne "python" einzugeben ,
-> Klicken Sie mit der rechten Maustaste auf eine Python-Datei (*. Py)
-> Setzen Sie die Eigenschaft open with auf "python.exe".
-> Aktivieren Sie das Kontrollkästchen "Dieses Programm immer für diesen Dateityp verwenden".
-> Hängen Sie den Pfad von python.exe an die Umgebungsvariable an, z. B. C: \ Python27 an die Umgebungsvariable PATH.
So führen Sie ein Python-Modul aus, ohne die Erweiterung ".py" einzugeben
-> Bearbeiten Sie die PATHEXT-Systemvariable und fügen Sie der Liste die Erweiterung ".PY" hinzu.
quelle
Gefunden eine unglaublich nützliche Antwort hier : Wie andere Python - Versionen in cmd laufen zu lassen?
Wie JF Sebastian vorschlägt, ist Python Launcher für Windows die beste und Standardoption zum Starten verschiedener Python-Versionen unter Windows. Früher war es ein Tool von Drittanbietern, jetzt wird es seit Python 3.3 offiziell unterstützt.
Dies ist ein großartiges Tool, benutze es einfach!
quelle
Können Sie python.exe von jeder Karte aus ausführen? Wenn Sie dies nicht tun, prüfen Sie, ob Sie die richtigen Werte für python.exe in der PATH-Umgebung haben
Befinden Sie sich im selben Verzeichnis wie blah.py. Überprüfen Sie dies, indem Sie den Befehl -> edit blah.py eingeben und prüfen, ob Sie diese Datei öffnen können
BEARBEITEN:
In diesem Fall können Sie nicht. ( python arg bedeutet, dass Sie python.exe mit einigen Parametern aufrufen, von denen Python annimmt, dass es sich um den Dateinamen des Skripts handelt, das Sie ausführen möchten.)
Sie können Bat-Dateien mit Linien in Ihrer Pfadzuordnung erstellen und die .bat-Datei ausführen
Beispiel:
Erstellen Sie in einer der Pfadzuordnungen die Datei blah.py.bat Edit und setzen Sie eine Zeile
Sie können jetzt blah.py von jedem Ort aus ausführen, da Sie beim Ausführen von bat-Dateien keine .bat-Erweiterung setzen müssen
quelle
Wenn ich das verstanden habe, ist es so:
KOPIEREN (nicht löschen) python.exe und benennen Sie in py.exe um und führen Sie Folgendes aus:
quelle
Führen Sie einfach den Befehl aus:
Angenommen, der Dateiname befindet sich im selben Ordner und Python wurde bereits zu Umgebungsvariablen hinzugefügt.
quelle