如何在Windows中执行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 文件的程序。
那问题出在哪里呢?
9 个回答
另外,如果你想在运行你的 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:\>
你应该把默认打开 Python 文件的程序设置为 python.exe。
右键点击一个 *.py 文件,选择“打开方式”这个选项。在弹出的对话框里,选择“python.exe”,然后勾选“总是使用这个程序打开这种文件”(大概是这个意思)。
这样一来,你的 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
为相同的值。可以参考这个链接
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
注册表路径可能会有所不同,可以使用python26.exe
或python.exe
,或者注册表中已有的其他版本。