如何在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/

python.exe的示例注册表设置 HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\commandregistrypath可能会有所不同,请使用python26.exepython.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.battest-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版本指定首选项,并将定位并执行该版本。

这是一个很好的工具,只是使用它!