如何在Windows上执行Python脚本?

2024-04-25 11:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的脚本blah.py(使用Python 2):

import sys
print sys.argv[1]

如果我执行我的脚本:

python c:/..../blah.py argument

它打印参数,但如果我执行脚本:

blah.py argument

出现错误:

IndexError...

所以参数不会传递给脚本。

路径中的python.exe。路径中还包含blah.py的文件夹。
python.exe是执行*.py文件的默认程序。

怎么了?


Tags: 文件pyimport路径脚本文件夹参数错误
3条回答

此外,如果希望能够在不在文件名末尾键入.py(或.pyw)的情况下运行python脚本,则需要将.PY(或.PY;.PYW)添加到PATHEXT环境变量的扩展列表中。

在Windows 7中:

右键单击计算机
左键单击属性
左键单击高级系统设置
左键单击“高级”选项卡
左键单击环境变量…
在“系统变量”下向下滚动,直到看到PATHEXT
左键单击PATHEXT将其高亮显示
左键单击“编辑”…
编辑“变量值”,使其包含;.PY(结束键将跳到结尾)
左键单击“确定”
左键单击“确定”
左键单击“确定”

注意#1:命令提示窗口将看不到正在关闭和重新打开的更改。

注2:扩展名.py.pyw的区别在于前者在运行时打开一个命令提示符,后者则不打开

在我的计算机上,我添加了;.PY;.PYW作为最后(最低优先级)扩展,因此PATHEXT的“before”和“after”值是:

之前:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
之后

以下是一些有指导意义的命令:

C:\>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

C:\>assoc .py
.py=Python.File

C:\>ftype Python.File
Python.File="C:\Python32\python.exe" "%1" %*

C:\>assoc .pyw
.pyw=Python.NoConFile

C:\>ftype Python.NoConFile
Python.NoConFile="C:\Python32\pythonw.exe" "%1" %*

C:\>type c:\windows\helloworld.py
print("Hello, world!")  # always use a comma for direct address

C:\>helloworld
Hello, world!

C:\>

您应该将处理python文件的默认应用程序设置为python.exe。

右键单击*.py文件,选择“打开方式”对话框。在那里选择“python.exe”并选中“always use this program for this file type”(类似的内容)。

然后您的python文件将始终使用python.exe运行

当你执行一个脚本而没有在前面键入“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

同样的价值。见http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

example registry setting for python.exeHKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command注册表路径可能不同,请使用python26.exepython.exe或注册表中已有的任何路径。

enter image description hereHKEY_CLASSES_ROOT\py_auto_file\shell\open\command

相关问题 更多 >