Frage Windows übergibt Befehlszeilenargumente nicht an Python-Programme, die von der Shell ausgeführt werden


Ich habe Probleme, Befehlszeilenargumente an Python-Programme zu übergeben, wenn ich versuche, sie direkt als ausführbare Befehle von einer Windows-Befehlsshell auszuführen. Zum Beispiel, wenn ich dieses Programm habe (test.py):

import sys
print "Args: %r" % sys.argv[1:]

Und führen Sie aus:

>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" %*

75
2018-04-14 20:56


Ursprung


Antworten:


Ich denke, ich habe das gelöst. Aus irgendeinem Grund gibt es einen zweiten Platz in der Registrierung (abgesehen von den Dateizuordnungen, die in HKEY_CLASSES_ROOT \ Python.File \ shell \ open \ command gespeichert sind):

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python25\\python.exe\" \"%1\" %*"

Dies scheint die kontrollierende Einstellung meines Systems zu sein. Die obige Registrierungseinstellung fügt "% *" hinzu, um alle Argumente an python.exe zu übergeben (es fehlte in meiner Registrierung aus irgendeinem Grund).


85
2018-04-14 21:28



Meine Einstellung war unter einem anderen Registrierungsschlüssel, HKEY_CLASSES_ROOT\py_auto_file. Die anderen erwähnten Schlüssel gab es auch, aber Windows benutzte diese aus irgendeinem Grund.


13
2017-10-14 18:57



Für Python 3.3 unter Windows 7 war meine Einstellung unter einem anderen Registrierungsschlüssel; Der Schlüssel, den ich geändert habe, um die Argumente zu übergeben, 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 angehängt %* zu ihm. 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 das ist der, den ich verändert habe, der es funktioniert hat.


8
2018-04-13 22:32



Um es für mich arbeiten zu lassen, musste ich den Registrierungspfad verwenden:

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

und fügte a hinzu %*


2
2018-03-15 16:36



Interessant. Funktioniert hier mit Python 2.6 und Windows XP (5.1.2600):

C:\Documents and Settings\hbrown>python test.py foo
['test.py', 'foo']

C:\Documents and Settings\hbrown>test.py foo
['C:\\Documents and Settings\\hbrown\\test.py', 'foo']

C:\Documents and Settings\hbrown>test foo
['C:\\Documents and Settings\\hbrown\\test.py', 'foo']

C:\Documents and Settings\hbrown>type test.py
import sys
print sys.argv 

C:\Documents and Settings\hbrown>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PY 

C:\Documents and Settings\hbrown>assoc .py
.py=Python.File

1
2018-04-14 21:15



Hier sind .reg-Dateien für Python 3.6, 2.7 und Anaconda3 zu beheben:

python-3.6.0.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyc]
@="Python.CompiledFile"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyw]
@="Python.NoConFile"
"Content Type"="text/plain"


[HKEY_CLASSES_ROOT\py_auto_file]

[HKEY_CLASSES_ROOT\py_auto_file\DefaultIcon]
@="C:\\Python36\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\py_auto_file\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.File]
@="Python File"

[HKEY_CLASSES_ROOT\Python.File\DefaultIcon]
@="C:\\Python36\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.CompiledFile]
@="Compiled Python File"

[HKEY_CLASSES_ROOT\Python.CompiledFile\DefaultIcon]
@="C:\\Python36\\DLLs\\pyc.ico"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.NoConFile]
@="Python File (no console)"

[HKEY_CLASSES_ROOT\Python.NoConFile\DefaultIcon]
@="C:\\Python36\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command]
@="\"C:\\Python36\\python.exe\" \"%1\" %*"

Python-2.7.0.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyc]
@="Python.CompiledFile"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyw]
@="Python.NoConFile"
"Content Type"="text/plain"


[HKEY_CLASSES_ROOT\py_auto_file]

[HKEY_CLASSES_ROOT\py_auto_file\DefaultIcon]
@="C:\\Python27\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\py_auto_file\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.File]
@="Python File"

[HKEY_CLASSES_ROOT\Python.File\DefaultIcon]
@="C:\\Python27\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.CompiledFile]
@="Compiled Python File"

[HKEY_CLASSES_ROOT\Python.CompiledFile\DefaultIcon]
@="C:\\Python27\\DLLs\\pyc.ico"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.NoConFile]
@="Python File (no console)"

[HKEY_CLASSES_ROOT\Python.NoConFile\DefaultIcon]
@="C:\\Python27\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"

ananconda3.reg (Benutzernamen ändern)

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.py]
@="Python.File"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyc]
@="Python.CompiledFile"
"Content Type"="text/plain"

[HKEY_CLASSES_ROOT\.pyw]
@="Python.NoConFile"
"Content Type"="text/plain"


[HKEY_CLASSES_ROOT\py_auto_file]

[HKEY_CLASSES_ROOT\py_auto_file\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\py_auto_file\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.File]
@="Python File"

[HKEY_CLASSES_ROOT\Python.File\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.File\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.CompiledFile]
@="Compiled Python File"

[HKEY_CLASSES_ROOT\Python.CompiledFile\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\pyc.ico"

[HKEY_CLASSES_ROOT\Python.CompiledFile\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"


[HKEY_CLASSES_ROOT\Python.NoConFile]
@="Python File (no console)"

[HKEY_CLASSES_ROOT\Python.NoConFile\DefaultIcon]
@="C:\\Users\\username\\Anaconda3\\DLLs\\py.ico"

[HKEY_CLASSES_ROOT\Python.NoConFile\shell\open\command]
@="\"C:\\Users\\username\\Anaconda3\\python.exe\" \"%1\" %*"

1
2018-06-02 13:09



Ihre Programmzuordnungen für .py Dateien könnten durcheinander gebracht werden. Einfach neu assoziieren .py Dateien mit Ihrer ausführbaren Python-Datei.

Rechtsklicke a .py Datei> Open with > Choose default program ... > [finde C: \ PythonXY \ python.exe]


0
2017-07-15 06:12



Ich habe alle Registrierungsschlüssel mit überprüft python.exe und py_auto_file und machte sie auf meine aktuelle Python-Installation einschließlich th hinweisen %* am Ende, das Argumente übergibt. Sie waren einige:

  • HKEY_CLASSES_ROOT \ Programme \ python.exe \ shell \ open \ command:

    • org: "C: \ miniconda3 \ python.exe" "% 1" "% *"
    • geändert: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ py_auto_file \ shell \ öffnen \ Befehl

    • org: "C: \ Programme \ Sublime Text 3 \ sublime_text.exe" "% 1"
    • geändert: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Klassen \ py_auto_file \ shell \ open \ command

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_USERS \ S-1-5-21-2621213409-1291422344-4183577876-2165 \ Software \ Klassen \ py_auto_file \ shell \ open \ command

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_USERS \ S-1-5-21-2621213409-1291422344-4183577876-2165_Classes \ py_auto_file \ shell \ open \ command

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ Programme \ pythonw.exe \ shell \ open \ command

    • org: "C: \ Python34 \ pythonw.exe" "% 1"
    • geändert: "C: \ Python35 \ pythonw.exe" "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Klassen \ Programme \ python.exe \ shell \ open \ command

    • org: "C: \ Python35 \ python.exe" "% 1" "% *"

Aber das hat meine Aufgabe nicht erfüllt. Ich musste auch meine Standard-Python-Anwendung ändern.

Application dialog

Wie man sieht, habe ich 3 Python-Versionen installiert. Es ist unmöglich zu sehen, welches hier ist, also habe ich alle drei als meine Standard-Python-Anwendung ausprobiert. Schließlich konnte ich meine Skriptargumente mit einem dieser drei Argumente verbinden.


0
2017-12-16 12:38