如何在 Windows 中执行 Python 脚本?

2025-02-11 09:50:00
admin
原创
41
摘要:问题描述:我有一个简单的脚本 blah.py(使用 Python 2):import sys print sys.argv[1] 如果我通过以下方式执行脚本:python c:/..../blah.py argument 它打印参数但如果我通过以下方式执行脚本:blah.py argument 发生错误:索引...

问题描述:

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

import sys
print sys.argv[1]

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

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

它打印参数但如果我通过以下方式执行脚本:

blah.py argument

发生错误:

索引错误...

所以参数不会传递给脚本。

PATH 中的 python.exe。包含 blah.py 的文件夹也在 PATH 中。python.exe

是执行 *.py 文件的默认程序。

问题是什么?


解决方案 1:

当你执行一个脚本而不在前面输入“python”时,你需要知道 Windows 如何调用该程序的两件事。首先是找出 Windows 认为它​​是什么类型的文件:

    C:>关联.py
    .py=Python.文件

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

    C:>ftype Python.File
    Python.File="c:python26python.exe" "%1" %*

因此在我的计算机上,当我输入“blah.py foo”时,它将执行这个精确的命令,其结果与我自己输入完整命令相比没有区别:

    “c:python26python.exe” “blah.py” foo

如果您输入相同的内容(包括引号),那么您将获得与仅输入“blah.py foo”相同的结果。现在您可以自己解决其余问题了。

(或者在您的问题中发布更多有用的信息,例如您在控制台中看到的实际剪切和粘贴副本。请注意,做这种事情的人会让他们的问题得到投票,他们会获得声誉点,并且会有更多人可能帮助他们提供好的答案。)

来自评论:

即使 assoc 和 ftype 显示正确的信息,参数也可能被删除。在这种情况下,直接修复 Python 的相关注册表项可能会有所帮助。设置

HKEY_CLASSES_ROOTApplicationspython26.exeshellopencommand

关键在于:

"C:Python26python26.exe" "%1" %*

以前可能%*缺失。同样,设置

 HKEY_CLASSES_ROOTpy_auto_fileshellopencommand

设置为相同的值。请参阅http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/

python.exe 的示例注册表设置
HKEY_CLASSES_ROOTApplicationspython.exeshellopencommand注册表路径可能会有所不同,使用python26.exepython.exe或注册表中已有的任何路径。

在此处输入图片描述
HKEY_CLASSES_ROOTpy_auto_fileshellopencommand

解决方案 2:

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

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

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

解决方案 3:

此外,如果您希望能够运行您的 Python 脚本而不在文件名末尾输入.py(或),您需要将(或) 添加到 PATHEXT 环境变量中的扩展列表中。.pyw`.PY`.PY;.PYW

在 Windows 7 中:

右键单击“计算机”

左键单击“属性”

左键单击“高级系统设置”

左键单击“高级”选项卡

左键单击“环境变量...

” 在“系统变量”下向下滚动直到看到 PATHEXT

左键单击 PATHEXT 以突出显示它

左键单击“编辑...”

编辑“变量值”以使其包含;.PY (End 键将跳到末尾)

左键单击“确定”

左键单击“确定”

左键单击“确定”

注意事项 1:如果不关闭并重新打开命令提示符窗口,它将不会看到更改。

.py注意事项#2:和扩展之间的区别.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:Python32python.exe" "%1" %*

C:>assoc .pyw
.pyw=Python.NoConFile

C:>ftype Python.NoConFile
Python.NoConFile="C:Python32pythonw.exe" "%1" %*

C:>type c:windowshelloworld.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,则可以运行 Python 脚本而无需指定 .py 扩展名:

T:> blah argument

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

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

T:> py -3 blah.py argument

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

解决方案 5:

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

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

我偶然发现了 Continuum 的人们使用其 Anaconda 包中附带的 Python 脚本提供的解决方案 - 请查看 Anaconda/Scripts 目录中的示例。

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

test.bat如下所示(调用.bat的文件具有我根据我的目的调整的相对路径):AnacondaScripts`python.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(例如),那么你甚至可以通过省略后缀AnacondaScripts来调用脚本.bat

test hello world
['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']

免责声明:我不知道发生了什么以及这是如何运作的,因此如果能得到任何解释我都会很感激。

解决方案 6:

Windows上,

运行python模块而不输入“python”

--> 右键单击​​任意 python(*.py) 文件

--> 将打开方式属性设置为“python.exe”

--> 勾选“始终使用该程序处理此文件类型”

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

运行Python 模块而不输入“.py”扩展名

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

解决方案 7:

你能从任何地图执行 python.exe 吗?如果不能,请检查 PATH 环境中 python.exe 的值是否正确

您是否与 blah.py 位于同一目录中。通过发出命令 -> edit blah.py 进行检查,并检查是否可以打开此文件

编辑:

在这种情况下你不能。(python arg表示你使用一些参数调用 python.exe,python 假定这些参数是你想要运行的脚本的文件名)

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

例如:

在路径映射之一中创建blah.py.bat
编辑文件并输入行

python C:Somedirlah.py

现在您可以从任何地方运行 blah.py,因为运行 bat 文件时不需要添加 .bat 扩展名

解决方案 8:

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

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

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

正如 JF Sebastian 所建议的,Windows 版 Python Launcher是启动 Windows 中不同版本 Python 的最佳和默认选择。它曾经是一个第三方工具,但现在从 Python 3.3 开始得到官方支持。

3.3 版本中的新功能。

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

这是一个非常棒的工具,赶紧使用它吧!

解决方案 9:

只需运行以下命令:

C:>python .ile_name.py

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用