2012-03-26 18 views
5

私は32ビットのWindows 7とPython 2.7を実行しています。Pythonコマンドライン引数(Windows)

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) 

私はこのスクリプトを実行Whenver、私はエラーが表示されます。

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

私のスクリプトを呼び出すには、私は「script.pyのtest.txtを書いています" 例えば。スクリプトとソースファイルの両方が同じディレクトリにあります。私はlen(sys.argv)をテストしました。そして、それはpythonスクリプト名である1つの値を含むものとしてのみ戻ってきます。

提案がありますか?私はそれがどのように私はCMDを介してコードを呼び出すと仮定することができます

+0

ファイルハンドルが開いています。代わりに 'with open(filePath、 'rb')をfh:'として使用してください。 – wim

+1

http://stackoverflow.com/questions/2640971/windows-is-not-passing-command-line-arguments-to-python-programs-executed-from-t#詳細については – laike9m

答えて

2

python script.py test.txtを使用してスクリプトを実行しようとすると、.py extentionとのインタープリタの関連付けが壊れている可能性があります。

+0

@fastreload、それがバインドされていますスクリプト名だけがインタプリタに渡され、残りのパラメータはスキップされます。これは壊れたアソシエーションです – newtover

+0

ありがとうございます。私は本当に壊れた会合を持っていたようでした。私は以下の例を踏襲し、治療を受けました: - http://www.voidspace.org.uk/python/articles/command_line.shtml – thefragileomen

8

あなたのレジストリにファイルを関連付けられている方法は、例えば、正しいかどうかを確認する必要があります

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

ありがとう!これは私の魅力のように働いた。私はなぜ 'python'が' CMD.EXE'から起動されたスクリプトのコマンドライン引数を忘れていたのかについて頭を悩ましていました(ただし、Mingw32シェルではありません)。 –

-2

あなたはsys.argv[0]を試してみましたか? len(sys.argv) = 0の場合、sys.argv[1]は2番目の存在しない項目にアクセスしようとします

2

問題はレジストリにあります。 python script.py test.txtを呼び出すことができますが、これは解決策ではありません。あなたのPATHにスクリプトを追加し、他のディレクトリの中でそれを使用したい場合は特にそうです。

RegEditを開き、HKEY_CLASSES_ROOT \ Applications \ python.exe \ shell \ open \ commandに移動します。名前(Default)とModifyを右クリックします。入力:

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

を[OK]をクリックして、あなたのCMDを再起動し、再試行してください。

関連する問題