por - Windows no está pasando argumentos de línea de comandos a los programas de Python ejecutados desde el shell
interprete de python (8)
Aquí hay archivos .reg para arreglar para Python 3.6, 2.7 y Anaconda3:
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 (cambiar nombre de usuario)
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/" %*"
Tengo problemas para obtener los argumentos de línea de comando pasados a los programas de Python si intento ejecutarlos directamente como comandos ejecutables desde un shell de comandos de Windows. Por ejemplo, si tengo este programa (test.py):
import sys
print "Args: %r" % sys.argv[1:]
Y ejecutar:
>test foo
Args: []
en comparación con:
>python test.py foo
Args: [''foo'']
Mi configuración tiene:
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" %*
Comprobé todas las claves de registro con python.exe
y py_auto_file
y les hice apuntar a mi instalación actual de python, incluyendo th %*
al final que pasa los argumentos. Eran bastantes:
HKEY_CLASSES_ROOT / Applications / python.exe / shell / open / command:
- org: "C: / miniconda3 / python.exe" "% 1" "% *"
- cambiado: "C: / Python35 / python.exe" "% 1" "% *"
HKEY_CLASSES_ROOT / py_auto_file / shell / open / command
- org: "C: / Archivos de programa / Sublime Text 3 / sublime_text.exe" "% 1"
- cambiado: "C: / Python35 / python.exe" "% 1" "% *"
HKEY_CURRENT_USER / Software / Classes / py_auto_file / shell / open / command
- org: "C: / Python35 / python.exe" "% 1" "% *"
HKEY_USERS / S-1-5-21-2621213409-1291422344-4183577876-2165 / Software / Classes / 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 / Applications / pythonw.exe / shell / open / command
- org: "C: / Python34 / pythonw.exe" "% 1"
- cambiado: "C: / Python35 / pythonw.exe" "% 1" "% *"
HKEY_CURRENT_USER / Software / Classes / Applications / python.exe / shell / open / command
- org: "C: / Python35 / python.exe" "% 1" "% *"
Pero eso no hizo el trabajo por mí. Tuve que cambiar mi aplicación predeterminada de Python también.
Como se puede ver, tengo 3 versiones de Python instaladas. Es imposible ver cuál es cuál aquí, así que probé las tres como mi aplicación predeterminada de Python. Eventualmente pude obtener los argumentos de mi script con uno de estos tres.
Creo que resolví esto. Por alguna razón, hay un SEGUNDO lugar en el registro (además del mostrado por las asociaciones de archivos almacenadas en HKEY_CLASSES_ROOT / Python.File / shell / open / command):
[HKEY_CLASSES_ROOT/Applications/python.exe/shell/open/command]
@="/"C://Python25//python.exe/" /"%1/" %*"
Esta parece ser la configuración de control en mi sistema. La configuración de registro anterior agrega el "% *" para pasar todos los argumentos a python.exe (por alguna razón, faltaba en mi registro).
Interesante. Funciona aquí utilizando python 2.6 y 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
Las asociaciones de tu programa para archivos .py
podrían estar en mal estado. Simplemente vuelve a asociar archivos .py
con tu ejecutable de python.
Haga clic con el botón derecho en un archivo .py
> Open with
> Choose default program ...
> [buscar C: / PythonXY / python.exe]
Mi configuración estaba bajo otra clave de registro, HKEY_CLASSES_ROOT/py_auto_file
. Las otras claves mencionadas también existían, pero Windows usaba esta por alguna razón.
Para Python 3.3 en Windows 7, mi configuración estaba bajo otra clave de registro; la clave que cambié para hacer que los argumentos pasaran era
HKEY_USERS/S-1-5-21-3922133726-554333396-2662258059-1000_Classes/py_auto_file/shell/open/command
Era "C:/Python/Python33/python.exe" "%1"
. Solo agregué %*
a él. El valor de la clave ahora es "C:/Python/Python33/python.exe" "%1" %*
.
Tenía varias (al menos cinco) otras claves con el valor "C:/Python/Python33/python.exe" "%1"
, pero esta es la que modifiqué que la hizo funcionar.
Para que funcione para mí, tuve que usar la ruta de registro:
HKEY_CLASSES_ROOT/py_auto_file/shell/open/command
y agregó un %*