Python命令行参数(Windows)
我正在运行32位Windows 7和Python 2.7。Python命令行参数(Windows)
我想写一个命令行Python脚本,可以从CMD运行。我正在尝试为sys.argv指定一个值[1]。我的脚本的目的是计算文件的MD5哈希值。当脚本在命令行中被调用时,这个文件将被输入,所以sys.argv [1]应该表示要被散列的文件。
这里是我下面的代码:
import sys
import hashlib
filename = sys.argv[1]
def md5Checksum(filePath):
fh = open(filePath, 'rb')
m = hashlib.md5()
while True:
data = fh.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()
# print len(sys.argv)
print 'The MD5 checksum of text.txt is', md5Checksum(filename)
Whenver我运行此脚本,我收到一个错误:
filename = sys.argv[1]
IndexError: list index out of range
把我的脚本,我一直在写“script.py的test.txt “ 例如。脚本和源文件都在同一个目录中。我已经测试了len(sys.argv),它只是回到包含一个值,即python脚本名称。
有什么建议吗?我只能假设这是我通过CMD调用代码的方式。
尝试使用python script.py test.txt
运行脚本,您可能会将解释器与.py
扩展的关联关联起来。
@fastreload,它是绑定的,但只有脚本名称被传递给解释器,其余的参数被跳过,这是一个破坏的关联 – newtover 2012-03-26 22:25:40
谢谢。看起来我确实有一个破裂的关联。我遵循下面的例子,它的工作原理: - http://www.voidspace.org.uk/python/articles/command_line.shtml – thefragileomen 2012-03-27 19:35:18
你应该检查你的注册表你有关的文件的方式是正确的,例如:
[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"
谢谢!这对我来说就像一个魅力。我在摸索着为什么'python'忘记了从'CMD.EXE'启动的脚本的命令行参数(尽管不是来自Mingw32 shell!)。 – 2014-10-28 17:18:08
你尝试sys.argv[0]
?如果len(sys.argv) = 0
然后sys.argv[1]
将尝试访问第二个和不存在的项目
问题是在注册表中。调用python script.py test.txt
的作品,但这不是解决方案。特别是如果您决定将脚本添加到您的PATH并且想要在其他目录中使用它。
打开RegEdit并导航到HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ command。右键单击名称(默认)和修改。输入:
"C:\Python27\python.exe" "%1" %*
单击确定,重新启动您的CMD并重试。
你有一个悬空的打开文件句柄。使用'打开(filePath,'rb')作为fh:'代替。 – wim 2012-03-27 00:11:43
请参阅http://stackoverflow.com/questions/2640971/windows-is-not-passing-command-line-arguments-to-python-programs-executed-from-t#了解更多信息 – laike9m 2013-12-13 17:06:05