sys.argv在Windows上隐式调用Python脚本时的内容

时间:2013-03-07 21:19:07

标签: python windows-7

我在Windows 7上的系统环境.PY变量中添加了PATHEXT个文件。我还在C:\scripts变量中添加了PATH

考虑我有一个非常简单的Python文件C:\ Scripts \ helloscript.py

print "hello"

现在我可以使用以下命令从我的控制台调用Python脚本:

C:\>helloscript

输出是:

hello

如果我将脚本更改为更动态,请在控制台上将第一个名称作为第二个参数,并将其与称呼一起打印出来:

import sys
print "hello,", sys.argv[1]

输出结果为:

c:\>helloscript brian
Traceback (most recent call last):
File "C:\Scripts\helloscript.py", line 2, in <module>
    print sys.argv[1]
IndexError: list index out of range

sys.argv看起来像:

['C:\\Scripts\\helloscript.py']

如果我以通常的方式明确地调用脚本:

C:\>python C:\Scripts\helloscript.py brian

输出结果为:

hello, brian

如果我尝试使用optparse,结果类似,尽管我可以避免收到错误:

from optparse import OptionParser

parser = OptionParser()
parser.add_option("-f", "--firstname", action="store", type="string", dest="firstname")
(options, args) = parser.parse_args()
print "hello,", options.firstname

输出结果为:

hello, None

同样,如果我明确地调用它,脚本工作正常。


这是问题所在。这是怎么回事?在隐式调用脚本时,为什么sys.argv不仅仅填充了脚本名称?

1 个答案:

答案 0 :(得分:3)

事实证明我必须手动编辑注册表:

HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ command was:

"C:\Python27\python.exe" "%1"

应该是:

"C:\Python27\python.exe" "%1" %*