Аргументы командной строки Python (Windows) - PullRequest
5 голосов
/ 27 марта 2012

Я использую 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

Ответы [ 4 ]

8 голосов
/ 27 марта 2012

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

[HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command]
@="\"C:\\Python27\\python.exe\" \"%1\" %*"
3 голосов
/ 24 июля 2014

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

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

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

Нажмите OK, перезапустите CMD и попробуйте снова.

2 голосов
/ 27 марта 2012

попробуйте запустить скрипт, используя python script.py test.txt, возможно, у вас нарушена связь интерпретатора с расширением .py.

0 голосов
/ 27 марта 2012

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

...