Я испытываю затруднения при получении параметров командной строки, переданных программам Python, если я пытаюсь выполнить их непосредственно, как исполняемый файл управляет от командного процессора Windows. Например, если у меня есть эта программа (test.py):
import sys
print "Args: %r" % sys.argv[1:]
И выполнитесь:
>test foo
Args: []
по сравнению с:
>python test.py foo
Args: ['foo']
Моя конфигурация имеет:
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" %*
Думаю, я решил эту проблему. По какой-то причине в реестре есть ВТОРОЕ место (помимо того, что показано ассоциациями файлов, хранящимися в HKEY_CLASSES_ROOT \ Python.File \ shell \ open \ command):
[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python25\\python.exe\" \"%1\" %*"
Похоже, это управляющий параметр в моей системе. Приведенный выше параметр реестра добавляет "% *" для передачи всех аргументов в python.exe (по какой-то причине он отсутствовал в моем реестре).
Интересно. Здесь работает с использованием Python 2.6 и 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