Python命令行参数(Windows)

时间:2012-03-26 22:02:50

标签: python command-line cmd

我正在运行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调用代码的方式

4 个答案:

答案 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) = 0sys.argv[1]将尝试访问第二个且不存在的项