从Windows命令行运行Python脚本,参数未传递
我有一堆用Python写的脚本。我是通过Windows命令提示符来运行它们的,像这样:
c:> my_script.py arg1 arg2 arg3
这个方法在很多电脑和各种Windows版本上都能用,已经好多年了。可是最近在我的Windows 7系统上就出问题了。脚本虽然能加载并执行,但传给脚本的参数却没有一个能成功。
为了说明这个问题,我有一个叫做py_echo.py的脚本:
from pprint import pprint as pp
import sys
if __name__ =='__main__':
pp(sys.argv)
然后我用参数a、b、c来执行它,但这些参数一个都没传进去。
c:\Python27\Lib\site-packages>py_echo.py a b c
['C:\\0\\usr\\bin\\py_echo.py']
如果我直接运行python.exe,参数就能正确传递。
c:\Python27\Lib\site-packages>python.exe c:\0\usr\bin\py_echo.py a b c
['c:\\0\\usr\\bin\\py_echo.py', 'a', 'b', 'c']
之前这个方法是没问题的。只有在我从电脑上卸载了一些旧版本的Python解释器和模块后,才开始出问题。重新安装Python也没有解决这个问题。我在想我该怎么做才能修复它呢?
这些年来我对自己写的脚本非常依赖,脚本出问题的时候我感觉很无助 :(
2 个回答
我在使用Windows 7和Python时也遇到了同样的问题,最后发现我需要正确设置文件关联,并通过注册表编辑器更新两个注册表项。
这个过程在一篇很棒的文章中有详细描述:
http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/
为了把答案移到Stack Overflow(而不是Jon的回答中的链接):
需要修改以下两个注册表项,以便把参数传递给Python:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
在现有的 "C:\PythonXX\python.exe" "%1"
后面加上 %*
,这样这个键就变成了: "C:\PythonXX\python.exe" "%1" %*
。
来源: http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/