我有一个简单的脚本blah.py(使用Python 2):
import sys
print sys.argv[1]
如果我通过执行我的脚本:
python c:/..../blah.py argument
它打印的说法,但如果我被执行脚本:
blah.py argument
出现错误:
IndexError ...
所以参数不传递给脚本。
python.exe的路径。 文件夹blah.py也PATH。
python.exe是默认程序来执行* .py文件。
问题是什么?
Answer 1:
当你没有在前面输入“蟒蛇”执行脚本,你需要了解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://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
的注册表路径可能会有所不同,使用python26.exe
或python.exe
或任何已经在注册表中。
HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
Answer 2:
你应该做的默认应用程序来处理Python文件被python.exe。
右键单击一个* .py文件,选择“打开方式”对话框。 在那里选择“python.exe”并选中“始终使用该程序进行这个文件类型”(类似的东西)。
那么你的Python文件将永远使用python.exe运行
Answer 3:
此外,如果您希望能够在不键入运行Python脚本.py
(或.pyw
)上的文件名的最后,你需要添加.PY
(或.PY;.PYW
),以扩展名列表在PATHEXT环境变量。
在Windows 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:\>
Answer 4:
如何在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
#! /usr/bin/env python
。
您可以明确指定版本例如,使用安装了Python 3版本的最新运行:
T:\> py -3 blah.py argument
还应该解决您的sys.argv
的问题作为一个副作用。
Answer 5:
我遇到同样的问题,但在需要打包我的Windows用户代码的情况下(从Linux的未来)。 我的包中包含了一些命令行选项的脚本。
我需要这些脚本来得到安装在Windows用户的计算机上的适当位置,使他们可以在命令行中调用它们。 由于包是所谓人性化,问我的用户更改他们的注册表来运行这些脚本是不可能的。
我遇到了一个解决方案,在连续使用乡亲来与他们的蟒蛇包Python脚本 - 检查你的蟒蛇/ scripts目录中的例子。
对于Python脚本test
,创建两个文件:一个test.bat
和test-script.py
。
test.bat
外观如下( .bat
文件中Anaconda\Scripts
调用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
如果你留在你的本地目录中这两个文件,你可以通过调用你的Python脚本.bat
做文件
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']
免责声明:我不知道发生了什么事情和如何工作的,因此希望得到任何解释。
Answer 6:
在Windows中 ,
要运行一个Python模块,而无需键入“蟒蛇”,
- >右键点击任何一条蟒蛇(。* PY)文件
- >设置财产露天“python.exe”
- >选中“始终使用该程序进行这个文件类型”
- >追加python.exe的路径可变环境例如追加C:\ Python27到PATH环境变量。
运行一个Python模块,而无需键入“py”为扩展名
- >编辑PATHEXT系统变量并追加“py”为扩展名的列表。
Answer 7:
发现一个非常有用的答案在这里 : 如何运行在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版本的偏爱,并会查找并执行该版本。
这是一个伟大的工具,只是用它!
Answer 8:
您可以从任何地图执行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
Answer 9:
如果这是我的理解,它是这样的:
C:\Users\(username)\AppData\Local\Programs\Python\Python(version)
COPY(不删除)python.exe和重命名为py.exe和执行:
py filename.py
Answer 10:
只需运行以下命令:
C:>python .\file_name.py
假设文件名相同的文件夹内,和Python已经被添加到环境变量。
文章来源: How to execute Python scripts in Windows?