97 votes

Windows n'est pas en passant des arguments de ligne de commande Python programmes exécutés à partir du shell

Je vais avoir des difficultés à obtenir des arguments de ligne de commande passé à Python programmes si j'essaie de les exécuter directement exécutables des commandes à partir d'une invite de commandes Windows. Par exemple, si j'ai ce programme (test.py):

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

Et de l'exécuter:

>test foo
Args: []

par rapport à:

>python test.py foo
Args: ['foo']

Ma configuration est:

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

124voto

mckoss Points 2630

Je pense que j'ai résolu ce problème. Pour une raison quelconque il y a une DEUXIÈME place dans le registre (en plus de celle indiquée par les associations de fichiers stockés dans la clé HKEY_CLASSES_ROOT\Python.Fichier\shell\open\command):

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

Cela semble être le contrôle de réglage sur mon système. Le paramètre de registre ci-dessus ajoute le "%*" à passer tous les arguments pour python.exe (il manquait dans ma base de registre pour une raison quelconque).

14voto

bainorama Points 41

Mon cadre était encore sous une autre clé de registre, HKEY_CLASSES_ROOT\py_auto_file. Les clés mentionnées existait aussi, mais Windows est d'utiliser celui-ci pour une raison quelconque.

14voto

Cody Piersall Points 1346

Pour Python 3.3 sur Windows 7, mon entourage était sous une autre clé de registre; la clé que j'ai modifié pour rendre les arguments sont passés a été

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

Il a été "C:\Python\Python33\python.exe" "%1". J'ai seulement ajouté %* . La valeur de la clé est maintenant de "C:\Python\Python33\python.exe" "%1" %*.

J'ai eu plusieurs (au moins cinq) d'autres clés avec la valeur "C:\Python\Python33\python.exe" "%1", mais c'est le seul que j'ai changé qui fait le travail.

0voto

hughdbrown Points 15770

Intéressant. Fonctionne à l'aide de python 2.6 et 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X