我有一个简单的脚本blah.py(使用Python 2):
import sys print sys.argv[1]
如果我通过以下方式执行脚本:
python c:/..../blah.py argument
它输出参数,但是如果我通过以下方式执行脚本:
blah.py argument
发生错误:
IndexError ...
因此参数不会传递给脚本。
PATH中的python.exe。路径中也包含blah.py的文件夹。 python.exe是执行* .py文件的默认程序。
问题是什么?
执行脚本而不在前面键入“ python”时,你需要了解有关Windows如何调用程序的两件事。首先是找出Windows认为的文件类型:
C:\> assoc .py .py = Python.File
接下来,你需要了解Windows如何使用该扩展名执行操作。它与文件类型“ Python.File”相关联,因此此命令显示了将要执行的操作:
C:\> ftype Python.File Python.File =“ c:\ python26 \ python.exe”“%1”%*
因此,在我的机器上,当我键入“ blah.py foo”时,它将执行此确切命令,与我自己键入完整内容相比,结果没有差异:
“ c:\ python26 \ python.exe”“ blah.py” foo
如果你键入相同的内容(包括引号),则得到的结果与键入“ blah.py foo”时的结果相同。现在,你可以自己解决其余的问题。
(或在你的问题中发布更多有用的信息,例如在控制台中看到的实际剪切和粘贴的副本。请注意,进行此类操作的人会投票给他们的问题进行投票,他们会获得声誉得分,还有更多的人可能会为他们提供良好的答案。)
来自评论: 即使assoc和ftype显示正确的信息,也有可能参数被剥离。在这种情况下可能有帮助的是直接修复Python的相关注册表项。设置
HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command
关键:
"C:\Python26\python26.exe" "%1" %*
以前很可能%*不见了。同样,设置
%*
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command