74

Tengo problemas para obtener argumentos de línea de comandos pasados ​​a programas Python si intento ejecutarlos directamente como comandos ejecutables desde un shell de comandos de Windows. Por ejemplo, si tengo este programa (test.py):Windows no pasa argumentos de línea de comandos a programas Python ejecutados desde el shell

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

Sin embargo, me funciona. C: \ Documents and Settings \ Quim> foo prueba Args: [ 'foo'] I situado test.py en la ubicación inicial para cmd.exe (% HOMEDRIVE %% HOMEPATH% en propiedades). Para el resto no hay nada especial en mi configuración: winxp, Activepython 2.6.5 – joaquin

+0

¿Podría usar [RegScanner] (http://www.nirsoft.net/utils/regscanner.html) y encontrar todas las apariciones de 'Python .File' en Su registro? –

+2

¡Qué error tan frustrante :(Acabo de reinstalar Python y todavía está roto! El error fue reportado en el rastreador de problemas de Python hace dos años http://bugs.python.org/issue7936 pero no hay ninguna solución - algunos de los desarrolladores usan Windows. –

Respuesta

83

Creo que he resuelto esto. Por alguna razón hay un segundo lugar en el registro (además de la mostrada por las asociaciones de archivos almacenados en HKEY_CLASSES_ROOT \ Python.File \ shell \ open \ command):

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

Este parece ser el control de la configuración 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).

+0

Esto no funcionó para mí en Windows 7. ¿En qué sistema operativo probó esto? – Acorn

+0

Probado en Vista. – mckoss

+6

Mi clave se encuentra aquí en Windows 7: HKEY_USERS \ S-1-5-21-2829634124-923609355-2255922086-1001 \ Software \ Classes \ Applications \ python.exe \ shell \ open \ command –

1

Interesante. Funciona aquí con 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 
13

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.

+0

¡Yo también! ¡Gracias! –

8

Para Python 3.3 en Windows 7, mi configuración estaba bajo otra clave de registro; He cambiado la clave para hacer que los argumentos son pasados ​​fue

HKEY_USERS\S-1-5-21-3922133726-554333396-2662258059-1000_Classes\py_auto_file\shell\open\command

Fue "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 he cambiado que la hizo funcionar.

2

Para hacer que funcione para mí, tuve que usar la ruta del registro:

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command 

y añadí un %*

0

Sus asociaciones de programas para .py archivos podrían estar en mal estado. Simplemente vuelva a asociar los archivos .py con su ejecutable de python.

Haga clic derecho en un archivo .py>Open with>Choose default program ...> [encontrar C: \ PythonXY \ python.exe]

+0

No funcionó en mi sistema, ya que siempre de manera predeterminada llamaba a Python 3.6. La [respuesta seleccionada] (https://stackoverflow.com/a/2641185/5991423) funcionó – Aaron3468

+0

. problemas desde Windows10, por lo que esto no funciona siempre. – rundekugel

0

he comprobado todas las claves de registro con python.exe y py_auto_file y les hizo apuntan a mi instalación actual, incluyendo pitón º %* al final que pasa argumentos.Eran unos cuantos:

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

    • org: "C: \ miniconda3 \ python.exe" "% 1 " "% *"
    • cambió: "C: \ Python35 \ python.exe" "% 1" "% *"
  • HKEY_CLASSES_ROOT \ py_auto_file \ shell \ open \ command

    • org: "C: \ Archivos de programa \ Sublime Texto 3 \ sublime_text.exe" "% 1"
    • cambió: "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"
    • cambió: "C: \ Python35 \ pythonw .exe " "% 1" "% *"
  • HKEY_CURRENT_USER \ Software \ Classes \ Aplicaciones \ python.exe \ shell \ open \ command

    • org:" C: \ Python35 \ pitón .exe ""% 1 ""% * "

Pero eso no hacer el trabajo para mí. Tuve que cambiar mi aplicación predeterminada de Python también.

Application dialog

Como se puede ver que tengo 3 versiones de Python instalados. 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.

1

Éstos son archivos .reg para arreglar para Python 3.6, 2.7 y Anaconda3:

pitón-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\" %*" 

pitón-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\" %*" 
Cuestiones relacionadas