Аргументы командной строки Python (Windows)

Я запускаю 32-разрядные Windows 7 и Python 2.7.

Я пытаюсь написать сценарий 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) 

Когда я запускаю этот скрипт, я получаю сообщение об ошибке:

 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 .

Вы должны проверить, что в вашем реестре, как вы связали файлы, правильно, например:

 [HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command] @="\"C:\\Python27\\python.exe\" \"%1\" %*" 

Проблема в реестре. Вызов python script.py test.txt работает, но это не решение. Специально, если вы решили добавить скрипт в свою PATH и хотите использовать его в других каталогах.

Откройте RegEdit и перейдите в HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ command. Щелкните правой кнопкой мыши имя (по умолчанию) и измените. Войти:

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

Нажмите «ОК», перезапустите CMD и повторите попытку.

Вы пытались sys.argv[0] ? Если len(sys.argv) = 0 то sys.argv[1] попытается получить доступ ко второму и несуществующему элементу