如何在Windows中执行Python脚本?

97 投票
9 回答
403020 浏览
提问于 2025-04-15 17:12

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

那问题出在哪里呢?

9 个回答

16

另外,如果你想在运行你的 Python 脚本时,不用在文件名后面加上 .py(或者 .pyw),你需要把 .PY(或者 .PY;.PYW)添加到 PATHEXT 环境变量的扩展名列表里。

在 Windows 7 中,你可以这样做:

右键点击“计算机”
左键点击“属性”
左键点击“高级系统设置”
左键点击“高级”标签
左键点击“环境变量...”
在“系统变量”下,向下滚动直到看到 PATHEXT
左键点击 PATHEXT 使其高亮
左键点击“编辑...”
在“变量值”中编辑,使其包含 ;.PY (按下 End 键可以直接跳到最后)
左键点击“确定”
左键点击“确定”
左键点击“确定”

注意 #1:命令提示符窗口在关闭并重新打开之前不会看到这个变化。

注意 #2:.py.pyw 的区别在于,前者运行时会打开一个命令提示符窗口,而后者则不会。

在我的电脑上,我把 ;.PY;.PYW 添加为最后的(优先级最低的)扩展名,所以 PATHEXT 的“之前”和“之后”的值是:

之前: .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:\>
23

你应该把默认打开 Python 文件的程序设置为 python.exe。

右键点击一个 *.py 文件,选择“打开方式”这个选项。在弹出的对话框里,选择“python.exe”,然后勾选“总是使用这个程序打开这种文件”(大概是这个意思)。

这样一来,你的 Python 文件就总是会用 python.exe 来运行了。

148

当你执行一个脚本而不在前面加上“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

为相同的值。可以参考这个链接

python.exe的注册表设置示例 HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command 注册表路径可能会有所不同,可以使用python26.exepython.exe,或者注册表中已有的其他版本。

在这里输入图片描述 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

撰写回答