Ich habe Probleme, Befehlszeilenargumente an Python-Programme zu übergeben, wenn ich versuche, sie direkt als ausführbare Befehle über eine Windows-Befehlsshell auszuführen. Zum Beispiel, wenn ich dieses Programm habe (test.py):
import sys
print "Args: %r" % sys.argv[1:]
Und ausführen:
>test foo
Args: []
verglichen mit:
>python test.py foo
Args: ['foo']
Meine Konfiguration hat:
PATH=...;C:\python25;...
PATHEXT=...;.PY;....
>assoc .py
.py=Python.File
>ftype | grep Python
Python.CompiledFile="C:\Python25\python.exe" "%1" %*
Python.File="C:\Python25\python.exe" "%1" %*
Python.NoConFile="C:\Python25\pythonw.exe" "%1" %*
Python.File
in Ihrer Registrierung finden?[HKCU|HKLM]\SOFTWARE\Classes\Applications\python.exe
oder verwendet[HKCU|HKLM\SOFTWARE\Classes\py_auto_file
, ist es falsch konfiguriert und die fehlerhaften Schlüssel sollten gelöscht werden. Verwenden Sie dann den Explorer ("Öffnen mit" oder die App für Dateizuordnungseinstellungen), um den richtigen "Python" -Eintrag auszuwählen, der die Standard-[HKCU|HKLM]\SOFTWARE\Classes\Python.File
ProgId verwendet. Überprüfen Sie denshell\open\command
Unterschlüssel in regedit. Wenn Python 3 installiert ist, sollte die Befehlsvorlage den Py-Launcher verwenden. Wenn der Launcher für alle Benutzer installiert ist, sollte die Vorlage sein"C:\Windows\py.exe" "%1" %*
.Antworten:
Ich glaube, ich habe das gelöst. Aus irgendeinem Grund gibt es einen ZWEITEN Platz in der Registrierung (außer dem, der durch die in HKEY_CLASSES_ROOT \ Python.File \ shell \ open \ command gespeicherten Dateizuordnungen angezeigt wird):
Dies scheint die Steuerungseinstellung auf meinem System zu sein. Die obige Registrierungseinstellung fügt das "% *" hinzu, um alle Argumente an python.exe zu übergeben (es fehlte aus irgendeinem Grund in meiner Registrierung).
quelle
Meine Einstellung befand sich unter einem weiteren Registrierungsschlüssel
HKEY_CLASSES_ROOT\py_auto_file
. Die anderen genannten Schlüssel waren ebenfalls vorhanden, aber Windows verwendete diesen aus irgendeinem Grund.quelle
Für Python 3.3 unter Windows 7 befand sich meine Einstellung unter einem anderen Registrierungsschlüssel. Der Schlüssel, den ich geändert habe, damit die Argumente übergeben werden, war
HKEY_USERS\S-1-5-21-3922133726-554333396-2662258059-1000_Classes\py_auto_file\shell\open\command
Es war
"C:\Python\Python33\python.exe" "%1"
. Ich habe nur daran angehängt%*
. Der Wert des Schlüssels ist jetzt"C:\Python\Python33\python.exe" "%1" %*
.Ich hatte mehrere (mindestens fünf) andere Schlüssel mit dem Wert
"C:\Python\Python33\python.exe" "%1"
, aber dies ist der, den ich geändert habe, damit es funktioniert.quelle
Hier sind .reg-Dateien, die für Python 3.6, 2.7 und Anaconda3 repariert werden müssen:
python-3.6.0.reg
python-2.7.0.reg
ananconda3.reg (Benutzername ändern)
quelle
Damit es für mich funktioniert, musste ich den Registrierungspfad verwenden:
und fügte hinzu a
%*
quelle
Interessant. Funktioniert hier mit Python 2.6 und Windows XP (5.1.2600):
quelle
Ihre Programmzuordnungen für
.py
Dateien sind möglicherweise durcheinander. Verknüpfen.py
Sie einfach die Dateien erneut mit Ihrer ausführbaren Python-Datei.Rechtsklick auf eine
.py
Datei>Open with
>Choose default program ...
> [gefunden C: \ PythonXY \ python.exe]quelle
Ich habe alle Registrierungsschlüssel mit
python.exe
und überprüftpy_auto_file
und sie auf meine aktuelle Python-Installation verweisen lassen, einschließlich th%*
am Ende, das Argumente übergibt. Sie waren ziemlich viele:Aber das hat mir nicht geholfen. Ich musste auch meine Standard-Python-Anwendung ändern.
Wie man sieht, habe ich 3 Python-Versionen installiert. Es ist unmöglich zu sehen, welches hier welches ist, also habe ich alle drei als meine Standard-Python-Anwendung ausprobiert. Schließlich konnte ich meine Skriptargumente mit einem dieser drei erhalten.
quelle
Beim Durchsuchen der Windows-Registrierung habe ich alle Stellen gefunden, an denen etwas Ähnliches
Python36\pythonw.exe "%1" %*
angezeigt wird.Wenn ich
python app.py args
an der Eingabeaufforderung tippe, funktioniert alles ordnungsgemäß.Wenn ich nur den App-Namen (
app.py args
) verwende, öffnet Windows app.py in Python, aber die App schlägt fehl, wenn sie versucht, auf argv [1] zuzugreifen, da len (argv) 1 ist.Anscheinend weiß Windows genug, um eine py-Datei an Python zu übergeben, aber ich kann anhand der Registrierungseinträge nicht herausfinden, wie der Befehl erstellt wird. Es scheint
"%1"
eher zu verwenden als"%1" %*
.quelle
Wenn dies auf meinem Windows 10-System durch Bearbeiten der folgenden Registrierungsschlüssel behoben wurde:
auf diesen Wert:
quelle
Vielen Dank für die meisten anderen Antworten, die mir geholfen haben, die Lösung zu finden!
Mein Fall war das Öffnen von
.py
Dateien mitpy.exe
(nichtpython.exe
direkt), dieser Fall wurde in einigen Kommentaren vermerkt, aber ich habe beschlossen, dies als separate Antwort zu veröffentlichen, um den Unterschied hervorzuheben.Also habe ich meine
.py
-Dateien mitC:\Windows\py.exe
und in derC:\Windows\py.ini
Konfiguration habe ich ein paar Shebang-Definitionenin meinen Skripten so zu verwenden
#!<MY_VENV_PY>
.Und unter Microsoft Windows 7 [Version 6.1.7601] hat mein Python-Skript die folgenden Argumente NICHT erhalten
aber das hat gut funktioniert
Dateizuordnungen waren in Ordnung
Ich habe viele Registrierungsänderungen versucht, aber die letzte Hilfe war die folgende Änderung (in einer
.reg
-Datei gespeichert und ausgeführt). Ich habe diese Registrierungsschlüssel-Suchzeichenfolge"%1"
mit dem Anfangswert gefunden"C:\Windows\py.exe" "%1"
und%*
am Ende als Antwort hinzugefügt . Hinweis:Zur Information, bevor ich versuchte, diese Schlüssel und Werte einzurichten und nicht half (zumindest vor den oben genannten):
quelle