Argumentos de línea de comandos de Python (Windows)

Estoy ejecutando Windows 7 de 32 bits y Python 2.7.

Estoy intentando escribir un script de Python de línea de comandos que puede ejecutarse desde CMD. Estoy tratando de asignar un valor a sys.argv [1]. El objective de mi script es calcular el valor hash MD5 de un archivo. Este archivo se ingresará cuando se invoque el script en la línea de comandos y, por lo tanto, sys.argv [1] debe representar el archivo que se debe cifrar.

Aquí está mi código a continuación:

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) 

Cuando ejecuto este script, recibo un error:

 filename = sys.argv[1] IndexError: list index out of range 

Para llamar a mi script, he estado escribiendo “script.py test.txt” por ejemplo. Tanto el script como el archivo fuente están en el mismo directorio. He probado len (sys.argv) y solo vuelve con un valor, que es el nombre del script de python.

¿Alguna sugerencia? Solo puedo asumir que es cómo invoco el código a través de CMD

intente ejecutar el script usando python script.py test.txt , puede que tenga una asociación rota del intérprete con la extensión .py .

Debe verificar que en su registro la forma en que haya asociado los archivos sea correcta, por ejemplo:

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

El problema está en el registro. Llamar a python script.py test.txt funciona, pero esta no es la solución. Especialmente si decide agregar el script a su RUTA y desea usarlo también en otros directorios.

Abra RegEdit y navegue a HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ command. Haga clic derecho en el nombre (Predeterminado) y Modificar. Entrar:

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

Haga clic en Aceptar, reinicie su CMD y vuelva a intentarlo.

¿Has sys.argv[0] ? Si len(sys.argv) = 0 , sys.argv[1] intentará acceder al segundo elemento que no existe