如何在Windows中执行Python脚本?


91

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

import sys
print sys.argv[1]

如果我通过以下方式执行脚本:

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

它输出参数,但是如果我通过以下方式执行脚本:

blah.py argument

发生错误:

IndexError ...

因此参数不会传递给脚本。

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

问题是什么?


3
发布一段代码可能有助于我们为您提供帮助。
jldupont

没有水晶球的人已经给出了解决方案=)print sys.argv [1]产生此错误。
ton4eg

如果您安装了多个版本的Python,则可能需要此stackoverflow.com/questions/1934675/…
laike9m 2014年

手动告诉python从注册表运行我的脚本:“ C:\ Python27 \ python.exe”“ C:\ Python27 \ tpt.py”“%1”`

Answers:


144

执行脚本而不在前面键入“ python”时,您需要了解有关Windows如何调用程序的两件事。首先是找出Windows认为是哪种文件:

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

接下来,您需要了解Windows如何使用该扩展名执行操作。它与文件类型“ Python.File”相关联,因此此命令显示了将要执行的操作:

    C:\> ftype Python。文件
    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/

python.exe的示例注册表设置 HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command注册表路径可能会有所不同,使用python26.exepython.exe注册表中已有的任何路径。

在此处输入图片说明 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command


30
即使assocftype显示正确的信息,可能会发生的参数剥去。在这种情况下可能有帮助的是直接修复Python的相关注册表项。将HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command密钥设置为: "C:\Python26\python26.exe" "%1" %* 以前可能%*丢失。同样,设置HKEY_CLASSES_ROOT\py_auto_file\shell\open\command为相同的值。见eli.thegreenplace.net/2010/12/14/…–
parvus

5
@parvus您的评论对我而言是最终的解决方案。即使关联读取正确,这两个键也都设置不正确。
内森·考克斯

1
我还遇到了HKEY_CLASSES_ROOT \ .py \ OpenWithProgids设置为与VisualStudio相关的问题,特别是当我尝试在AppVeyor测试中运行Python脚本时。请参阅help.appveyor.com/discussions/problems/…
Jack O'Connor 2015年

1
我有类似的问题。Anaconda默认添加缺少%*的注册表项
prasad

在Win10中,我编写test.py 123123打印为sys.argv[1]。微软改变了什么吗?
赫尔沃耶

22

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

右键单击* .py文件,选择“打开方式”对话框。在其中选择“ python.exe”,然后选中“始终使用该程序作为该文件类型”(类似的东西)。

那么您的python文件将始终使用python.exe运行


16

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

在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:\>

4

如何在Windows中执行Python脚本?

您可以安装pylauncher。它用于启动.py,.pyw,.pyc,.pyo文件,并支持多种Python安装:

T\:> blah.py argument

如果PATHEXT环境变量中有.py,.pyw,则可以在不指定.py扩展名的情况下运行Python脚本:

T:\> blah argument

#!如果您安装了多个版本,它将增加对shebang(标题行)的支持,以便在Windows上选择所需的Python版本。您可以使用* nix-compatible语法#! /usr/bin/env python

您可以明确指定版本,例如,以使用最新安装的Python 3版本运行:

T:\> py -3 blah.py argument

它也应该sys.argv作为副作用解决您的问题。


Python Launcher处于Beta状态。
Nicolas Barbulesco,2015年

@NicolasBarbulesco:Python启动器包含在Python 3.3中,也就是说,它已经足够好
jfs 2015年

也许。但是我没有成功在Windows上安装Python 3。也许您可以在这里帮助我。
Nicolas Barbulesco,2015年

4

我遇到了同样的问题,但是在需要为Windows用户(来自Linux)打包我的代码的情况下。我的程序包包含许多带有命令行选项的脚本。

我需要将这些脚本安装在Windows用户计算机上的适当位置,以便他们可以从命令行调用它们。由于该软件包对用户友好,因此不可能让我的用户更改其注册表以运行这些脚本。

我遇到了一个解决方案,Continuum的人们使用了他们的Anaconda软件包随附的Python脚本-请查看您的Anaconda / Scripts目录以获取示例。

对于Python脚本test,创建两个文件:a test.bat和a test-script.py

test.bat看起来如下所示(调用中的.bat文件具有我适合我使用的相对路径):Anaconda\Scriptspython.exe

@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']

免责声明:我不知道发生了什么以及它如何工作,因此不胜感激。


.bat为每个Python脚本创建包装器既笨拙又多余。我不会推荐这个。
Tripleee '17

2

Windows上

在不输入“ python”的情况下运行python模块

->右键单击任何python(*。py)文件

->将open with属性设置为“ python.exe”

->选中“始终使用此程序作为此文件类型”

->将python.exe的路径附加到变量环境,例如,将C:\ Python27附加到PATH环境变量。

不键入“ .py”扩展名的情况下运行python模块

->编辑PATHEXT系统变量,并将“ .PY”扩展名附加到列表中。


1

在这里找到了一个非常有用的答案:如何在cmd中运行不同的python版本?

我建议使用不久前引入到Python 3.3中的Windows的Python启动器实用程序。您还可以直接从作者的网站上手动下载并安装它,以与Python 2和3的早期版本一起使用。

无论您如何获得它,安装后它都会与所有标准Python文件扩展名(即.py,.pyw,.pyc和.pyo文件)相关联。您不仅可以在命令提示符下显式控制使用哪个版本,还可以通过在脚本的末尾添加Linux / Unix-y shebang#!/ usr / bin / env pythonX注释,逐个脚本地控制该版本。 Python脚本的开头。

正如JF Sebastian所建议的那样,Windows的Python启动器是在Windows中启动不同版本的Python的最佳和默认选择。它曾经是第三方工具,但自Python 3.3以来已得到正式支持。

版本3.3中的新功能。

Windows的Python启动器是一个实用程序,可帮助您定位和执行不同的Python版本。它允许脚本(或命令行)指示特定Python版本的首选项,并将定位并执行该版本。

这是一个很棒的工具!


0

您可以从任何地图执行python.exe吗?如果没有,请检查PATH环境中python.exe的值是否正确

您与blah.py位于同一个目录吗?通过发出命令->编辑blah.py进行检查,并检查是否可以打开该文件

编辑:

在这种情况下,您将无法执行。(python arg表示您调用python.exe,其中一些参数被python假定为您要运行的脚本的文件名)

您可以在路径图中创建蝙蝠文件白线并运行.bat文件

示例:
在路径映射之一中,创建blah.py.bat 编辑文件并放入行

python C:\Somedir\blah.py

现在,您可以从任何位置运行blah.py,因为在运行bat文件时无需放置.bat扩展名


路径中的python。PATH中也包含blah.py的目录。主要思想是执行python脚本而不编写完整路径。但是现在我在参数传递方面遇到问题。
ton4eg

3
Ralu,您不需要批处理文件即可以这种方式执行python脚本。使用PATHEXT环境变量将.py和.pyw包含为可执行扩展名。这个变量就是为什么您也不需要指定.bat的原因。
托德

0

如果那是我的理解,那就是这样的:

C:\Users\(username)\AppData\Local\Programs\Python\Python(version)

复制(不删除)python.exe并重命名为py.exe并执行:

py filename.py

0

只需运行以下命令:

C:>python .\file_name.py

假设文件名在同一文件夹中,并且Python已添加到环境变量中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.