我正在运行32位Windows 7和Python 2.7。
我正在尝试编写一个可以从CMD运行的命令行Python脚本。我正在尝试为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)
当我运行此脚本时,收到错误:
filename = sys.argv[1]
IndexError: list index out of range
要调用我的脚本,我一直在写“script.py test.txt”。脚本和源文件都在同一目录中。我测试了len(sys.argv),它只返回包含一个值,即python脚本名称。
有什么建议吗?我只能假设我是通过CMD调用代码的方式
答案 0 :(得分:8)
您应该在注册表中检查关联文件的方式是否正确,例如:
[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"
答案 1 :(得分:3)
问题出在注册表中。调用python script.py test.txt
有效,但这不是解决方案。特别是如果您决定将脚本添加到PATH并希望在其他目录中使用它。
打开RegEdit并导航到HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ command。右键单击名称(默认)和修改。输入:
"C:\Python27\python.exe" "%1" %*
单击“确定”,重新启动CMD并重试。
答案 2 :(得分:2)
尝试使用python script.py test.txt
运行脚本,您可能会将解释器与.py
扩展名关联起来。
答案 3 :(得分:-2)
你试过sys.argv[0]
吗?如果len(sys.argv) = 0
则sys.argv[1]
将尝试访问第二个且不存在的项