如何在Windows中执行Python脚本?
我有一个简单的脚本blah.py(使用Python 2):
import sys print sys.argv[1]
如果我通过执行我的脚本:
python c:/..../blah.py argument
它打印参数,但如果我通过执行脚本:
blah.py argument
发生错误:
IndexError …
所以参数不会传递给脚本。
python.exe在PATH中。 blah.py文件夹也在path。
python.exe是执行* .py文件的默认程序。
问题是什么?
当您在前面input“python”而不执行脚本时,您需要知道两个有关Windows如何调用该程序的内容。 首先是找出Windows认为它是什么types的文件:
C:\> assoc .py 的.py = Python.File
接下来,您需要知道Windows如何使用该扩展执行操作。 它与文件types“Python.File”相关联,所以这个命令显示了它将要做的事情:
C:\> ftype Python.File Python.File =“c:\ python26 \ python.exe”“%1”%*
所以在我的机器上,当我input“blah.py foo”时,它会执行这个确切的命令,与我自己input完整的东西的结果没有任何区别:
“c:\ python26 \ python.exe”“blah.py”foo
如果input相同的东西,包括引号,那么只要input“blah.py foo”,就会得到相同的结果。 现在你可以为自己找出问题的其他部分。
(或者在你的问题中发布更多有用的信息,比如你在控制台中看到的剪切粘贴的副本,请注意,那些做这种事情的人得到他们的问题投票,他们获得了声望点,更多的人很可能帮助他们得到很好的答案。)
从评论中引入:
即使assoc和ftype显示正确的信息,也可能发生这些参数被剥离。 在这种情况下可能有所帮助的是直接修复Python的相关registry项。 设置
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/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
registrypath可能会有所不同,请使用python26.exe
或python.exe
或已经在registry中的任何一个。
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
你应该使默认的应用程序来处理python文件是python.exe。
右击一个* .py文件,select“打开方式”对话框。 在那里select“python.exe”,并选中“总是使用这个程序的这种文件types”(类似的东西)。
那么你的Python文件将始终使用python.exe运行
此外,如果您希望能够在文件名末尾input.py
(或.pyw
)的情况下运行python脚本,则需要将.PY
(或.PY;.PYW
)添加到扩展名列表在PATHEXT环境variables中。
在Windows 7中:
用鼠标右键单击计算机
左键单击“属性”
左键单击高级系统设置
左键单击“高级”选项卡
左键单击环境variables…
在“系统variables”下向下滚动,直到看到PATHEXT
左键单击PATHEXT以突出显示它
左键单击编辑…
编辑“variables值”,使其包含;.PY
(结束键将跳至末尾)
左键单击确定
左键单击确定
左键单击确定
注#1:命令提示符窗口不会看到没有closures和重新打开的变化。
注意#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:\>
如何在Windows中执行Python脚本?
你可以安装pylauncher 。 它用于启动.py,.pyw,.pyc,.pyo文件并支持多种Python安装:
T\:> blah.py argument
如果在PATHEXT环境variables中包含.py,.pyw,则可以在不指定.py扩展名的情况下运行Python脚本:
T:\> blah argument
如果您安装了多个版本,它会添加对shebang( #!
标题行)的支持以在Windows上select所需的Python版本。 你可以使用* nix兼容的语法#! /usr/bin/env python
#! /usr/bin/env python
。
您可以明确指定版本,例如,使用最新安装的Python 3版本运行:
T:\> py -3 blah.py argument
它也应该修复你的sys.argv
问题作为一个副作用。
我遇到了同样的问题,但在需要打包Windows用户(来自Linux)的代码的情况下。 我的软件包包含许多带有命令行选项的脚本。
我需要这些脚本来安装在Windows用户计算机的适当位置,以便他们可以从命令行调用它们。 由于该软件包被认为是用户友好的,因此要求用户更改registry以运行这些脚本是不可能的。
我遇到了一个解决scheme,Continuum的人使用Anaconda软件包附带的Python脚本 – 请查看Anaconda / Scripts目录中的示例。
对于Python脚本test
,创build两个文件: test.bat
和test-script.py
。
test.bat
如下所示( Anaconda\Scripts
的.bat
文件调用了python.exe
,其中包含一个相对path,用于我的目的):
@echo off set PYFILE=%~f0 set PYFILE=%PYFILE:~0,-4%-script.py "python.exe" "%PYFILE%" %*
test-script.py
是你实际的Python脚本:
import sys print sys.argv
如果将这两个文件保留在本地目录中,则可以通过.bat
文件调用Python脚本
test.bat hello world ['C:\\...\\test-scripy.py', 'hello', 'world']
如果您将这两个文件复制到PATH
上的位置(例如Anaconda\Scripts
),则甚至可以通过.bat
后缀来调用脚本
test hello world ['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']
免责声明:我不知道发生了什么,以及如何运作,所以将不胜感激任何解释。
在Windows上 ,
要运行一个python模块而不input“python” ,
– >右键单击任何python(* .py)文件
– >将属性设置为“python.exe”
– >检查“总是使用这个程序为这个文件types”
– >将python.exe的path附加到variables环境中,例如将C:\ Python27附加到PATH环境variables。
在不input“.py”扩展名的情况下运行python模块
– >编辑PATHEXT系统variables并将“.PY”扩展名附加到列表中。
你能从任何地图执行python.exe吗? 如果您不这样做,请在PATH环境中使用适当的python.exe值
你在同一个目录比blah.py。 检查这个通过发出命令 – >编辑blah.py并检查是否可以打开这个文件
编辑:
在这种情况下,你不能。 ( python arg表示你调用python.exe白色的一些参数,python假设你想运行的脚本的文件名)
您可以在path图中创build蝙蝠文件白线,然后运行.bat文件
例:
在path图之一中创buildblah.py.bat编辑文件并放置行
python C:\Somedir\blah.py
您现在可以从任何地方运行blah.py,因为运行bat文件时不需要将.bat扩展
在这里find一个非常有用的答案: 如何在cmd中运行不同的python版本?
我会build议使用Python启动程序的Windows实用程序,刚才介绍到Python 3.3。 您也可以直接从作者的网站下载并安装它,以便与早期版本的Python 2和3一起使用。
不pipe你如何获得它,在安装之后,它将把所有标准的Python文件扩展名(即.py,.pyw,.pyc和.pyo文件)关联起来。 您不仅可以明确地控制在命令提示符下使用哪个版本,而且还可以通过在脚本中添加Linux / Unix-y shebang#!/ usr / bin / env pythonX注释你的Python脚本的开始。
正如JF Sebastian所build议的, 用于Windows的Python启动器是在Windows中启动不同版本的Python的最佳和默认select。 它曾经是一个第三方工具,但现在它从Python3.3起正式被支持。
3.3版本中的新function
Windows的Python启动器是一个实用工具,可以帮助您定位和执行不同的Python版本。 它允许脚本(或命令行)为特定的Python版本指定首选项,并将定位并执行该版本。
这是一个很好的工具,只是使用它!