我有一个简单的脚本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文件。

什么问题?

有帮助吗?

解决方案

当你执行一个脚本,而不在前面键入“蟒蛇”,你需要了解Windows如何调用该程序两件事情。首先是要找出什么样的文件Windows认为它是:

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

接下来,你需要知道的Windows是如何执行与扩展的东西。它与文件类型“Python.File”相关的,所以这个命令显示了它会做:

    C:\>ftype Python.File
    Python.File="c:\python26\python.exe" "%1" %*

所以,我的机器上,当我输入“blah.py富”,它会比我输入了完整的东西自己执行这个确切的命令,在结果没有什么区别:

    "c:\python26\python.exe" "blah.py" foo

如果你键入同样的事情,包括引号,然后你会得到相同的结果时,你只需键入“blah.py富”。现在,你在一个位置,找出你的问题的其余部分自己。

(或张贴在你的问题更多有用的信息,就像你在控制台中看到实际的剪切和粘贴拷贝。需要注意的是人谁做这种类型的东西得到了他们的提问投票了,他们获得的声誉分,更多的人有可能帮助他们很好的答案。)

带来从评论:

即使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://礼.thegreenplace.net /十二分之二千零十/ 14 /问题通过-参数到Python的脚本上窗口/

HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command注册表路径可能会发生变化,使用或python26.exepython.exe取其已经在注册表中。

HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

其他提示

您应该默认的应用程序来处理Python文件是python.exe。

右键单击一个* .py文件,选择“打开方式”对话框。在那里选择“python.exe”,并检查“始终使用该程序进行这个文件类型”(类似的东西)。

那么你的Python文件将永远使用python.exe运行

此外,如果你希望能够在没有文件名的末尾键入.py(或.pyw)运行Python脚本,你需要.PY(或.PY;.PYW)在PATHEXT环境添加到扩展名列表变量

在视窗7:

在电脑点击右键点击 左键单击属性点击 左键单击高级系统设置,点击 左键单击高级选项卡点击 左键单击环境变量...点击 在“系统变量”向下滚动,直到你看到PATHEXT结果 在PATHEXT左键单击选中它,点击 左键单击编辑...点击 编辑“变量值”,以便它包含;.PY (End键将跳到最终)结果 左键单击OK点击 左键单击OK点击 左键单击OK点击

请注意#1:命令提示窗口将看不到变化的W / O被关闭并重新打开

注意#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:\>
  

如何在Windows中执行Python脚本?

您可以安装 pylauncher 。它是用来发射的.py,.pyw,pyc文件,.pyo文件和支持多个Python的安装:

T\:> blah.py argument

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

T:\> blah argument

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

可以明确地指定例如版本,采用最新安装了Python 3版本来运行:

T:\> py -3 blah.py argument

还应该解决您的sys.argv问题作为一个副作用。

我遇到同样的问题,但在需要打包我的Windows用户代码的情况下(从Linux的未来)。 我的包中包含多个具有命令行选项的脚本。

我需要这些脚本来得到安装在Windows用户的计算机上的适当位置,使他们可以在命令行中调用它们。 由于包是所谓人性化,问我的用户更改他们的注册表来运行这些脚本是不可能的。

我遇到了一个解决方案,在连续使用附带的蟒蛇包乡亲Python脚本 - 检查你的蟒蛇/ scripts目录的例子

有关的Python脚本test,创建两个文件:a。test.battest-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']

免责声明:我不知道发生了什么事情和如何工作的,因此希望任何解释

在<强>窗

要的运行Python模块而无需键入 “蟒”下,

- >右击任何蟒(* PY)文件

- >设置有属性的开至 “python.exe”

- >检查“始终使用该程序进行这个文件类型”

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

生成一个python模块而无需键入 “py” 为扩展名

- >编辑PATHEXT系统变量和追加“py”为扩展列表

找到一个非常有用的答案此处如何在CMD运行不同版本的Python?

  

我会建议使用Python启动的Windows实用程序,引进了成Python 3.3前一阵子。您也可以手动下载并直接从作者的网站与早期版本的Python 2和3的使用安装。

     

不管你如何获得它,在安装后,将已与所有的标准Python文件扩展名相关联的本身(即的.py,.pyw,pyc文件,和.pyo文件)。您不仅能够明确地控制使用的版本在命令提示符下,也对脚本,通过脚本基础上加入的Linux / Unix-Y家当#!在在/ usr / bin中/ env的pythonX评论开始你的Python脚本。

作为JF塞巴斯蒂安表明, Python的启动为Windows 是在Windows推出不同版本的Python的最好的和默认的选择。它曾经是一个第三方工具,但现在却因为Python 3.3正式支持。

  

新的3.3版本。

     

Python的发射器用于Windows是一个工具,它有助于在不同Python版本的位置和执行。它允许脚本(或命令行),以指示用于特定Python版本的偏好,并且将查找并执行该版本。

这是一个伟大的工具,只是用它!

您可以从任何地图执行python.exe? 如果你不这样做,赤如果您在PATH环境为python.exe适当的值

您在同一个目录中比blah.py.通过发出命令检查这一点 - >编辑blah.py和检查,如果你能打开此文件

修改

在这种情况下,你不能。 (蟒ARG 意味着你打电话python.exe丝毫一些参数,这些参数蟒假定是要运行的脚本的文件名)

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

例:结果 在路径地图中的一个创建 blah.py.bat 编辑文件,并把线

python C:\Somedir\blah.py

您现在可以从anywere运行blah.py,监守你并不需要运行该批处理文件时把蝙蝠extention

如果这是我的理解,它是这样的:

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

COPY(未删除)python.exe和重命名为py.exe并执行:

py filename.py

只需运行命令:

C:>python .\file_name.py

假设文件名是相同的文件夹内和Python已经被添加到环境变量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top