Windows未将命令行参数传递给从Shell执行的Python程序
我在从Windows命令行直接运行Python程序时,遇到了传递命令行参数的问题。比如,我有一个程序(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" %*
12 个回答
14
在Windows 7上使用Python 3.3时,我的设置在另一个注册表键下;我修改的键是:
HKEY_USERS\S-1-5-21-3922133726-554333396-2662258059-1000_Classes\py_auto_file\shell\open\command
原来的内容是 "C:\Python\Python33\python.exe" "%1"
。我只是加上了 %*
。现在这个键的值变成了 "C:\Python\Python33\python.exe" "%1" %*
。
我还有其他几个(至少五个)键的值也是 "C:\Python\Python33\python.exe" "%1"
,但我修改的就是这个键,让它能够正常工作。
14
我的设置是在另一个注册表键下,HKEY_CLASSES_ROOT\py_auto_file
。虽然提到的其他键也存在,但不知为什么,Windows却使用了这个。
125
我想我找到了这个问题的解决办法。奇怪的是,注册表里有第二个地方(除了在 HKEY_CLASSES_ROOT\Python.File\shell\open\command 中显示的文件关联):
[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python25\\python.exe\" \"%1\" %*"
这个地方似乎是我系统上控制设置的关键。上面的注册表设置添加了“%*”,用来把所有参数传递给 python.exe(不知道为什么我注册表里缺少这个)。