2

我在 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隐式调用我的脚本时不会只填充脚本名称?

4

1 回答 1

4

原来我不得不手动编辑注册表:

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

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

应该是:

"C:\Python27\python.exe" "%1" %*
于 2013-03-07T22:22:14.520 回答