一尘不染

如何在Windows中执行Python脚本?

python

我有一个简单的脚本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文件的默认程序。

问题是什么?


阅读 1168

收藏
2020-02-22

共1个答案

一尘不染

执行脚本而不在前面键入“ 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
2020-02-22