Windows未将命令行参数传递给从Shell执行的Python程序

98 投票
12 回答
42256 浏览
提问于 2025-04-15 21:36

我在从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(不知道为什么我注册表里缺少这个)。

撰写回答