2024-05-23 09:31:18 发布
网友
我有一个简单的脚本blah.py(使用Python 2):
import sys print sys.argv[1]
如果我执行我的脚本:
python c:/..../blah.py argument
它打印参数,但如果我执行脚本:
blah.py argument
出现错误:
IndexError...
所以参数不会传递给脚本。
路径中的python.exe。路径中还包含blah.py的文件夹。 python.exe是执行*.py文件的默认程序。
怎么了?
此外,如果希望能够在不在文件名末尾键入.py(或.pyw)的情况下运行python脚本,则需要将.PY(或.PY;.PYW)添加到PATHEXT环境变量的扩展列表中。
.py
.pyw
.PY
.PY;.PYW
在Windows 7中:
右键单击计算机 左键单击属性 左键单击高级系统设置 左键单击“高级”选项卡 左键单击环境变量… 在“系统变量”下向下滚动,直到看到PATHEXT 左键单击PATHEXT将其高亮显示 左键单击“编辑”… 编辑“变量值”,使其包含;.PY(结束键将跳到结尾) 左键单击“确定” 左键单击“确定” 左键单击“确定”
;.PY
注意#1:命令提示窗口将看不到正在关闭和重新打开的更改。
注2:扩展名.py和.pyw的区别在于前者在运行时打开一个命令提示符,后者则不打开
在我的计算机上,我添加了;.PY;.PYW作为最后(最低优先级)扩展,因此PATHEXT的“before”和“after”值是:
;.PY;.PYW
之前:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
在.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW之后
.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:\>
您应该将处理python文件的默认应用程序设置为python.exe。
右键单击*.py文件,选择“打开方式”对话框。在那里选择“python.exe”并选中“always use this program for this file type”(类似的内容)。
然后您的python文件将始终使用python.exe运行
当你执行一个脚本而没有在前面键入“python”时,你需要知道Windows如何调用程序的两件事。首先是找出Windows认为它是什么类型的文件:
C:\>assoc .py .py=Python.File
接下来,您需要知道Windows如何使用该扩展执行任务。它与文件类型“Python.file”关联,因此此命令显示它将执行的操作:
C:\>ftype Python.File 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/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command注册表路径可能不同,请使用python26.exe或python.exe或注册表中已有的任何路径。
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
python26.exe
python.exe
此外,如果希望能够在不在文件名末尾键入
.py
(或.pyw
)的情况下运行python脚本,则需要将.PY
(或.PY;.PYW
)添加到PATHEXT环境变量的扩展列表中。在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
之后
以下是一些有指导意义的命令:
您应该将处理python文件的默认应用程序设置为python.exe。
右键单击*.py文件,选择“打开方式”对话框。在那里选择“python.exe”并选中“always use this program for this file type”(类似的内容)。
然后您的python文件将始终使用python.exe运行
当你执行一个脚本而没有在前面键入“python”时,你需要知道Windows如何调用程序的两件事。首先是找出Windows认为它是什么类型的文件:
接下来,您需要知道Windows如何使用该扩展执行任务。它与文件类型“Python.file”关联,因此此命令显示它将执行的操作:
所以在我的机器上,当我输入“blah.py foo”时,它将执行这个确切的命令,结果与我自己输入完整的命令没有任何区别:
如果您键入相同的内容,包括引号,那么您将得到与只键入“blah.py foo”时相同的结果。现在你可以自己解决剩下的问题了。
(或者在您的问题中发布更多有用的信息,比如您在控制台中看到的内容的实际剪切和粘贴副本。请注意,做这类事情的人会得到他们的问题的投票结果,他们也会得到声誉积分,更多的人可能会帮助他们获得好的答案。)
从评论中引入:
即使assoc和ftype显示了正确的信息,参数也可能被删除。在这种情况下,可能有帮助的是直接修复Python的相关注册表项。设置
关键:
很可能,以前,
%*
丢失了。同样,设置同样的价值。见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
相关问题 更多 >
编程相关推荐