2012-03-26 14 views
5

मैं 32-बिट विंडोज 7 और पायथन 2.7 चला रहा हूं।पायथन कमांड लाइन तर्क (विंडोज)

मैं एक कमांड लाइन पायथन लिपि लिखने की कोशिश कर रहा हूं जो सीएमडी से चल सकता है। मैं 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 " उदाहरण के लिए। स्क्रिप्ट और स्रोत फ़ाइल दोनों एक ही निर्देशिका में हैं। मैंने लेन (sys.argv) का परीक्षण किया है और यह केवल एक मान के रूप में वापस आता है, जो कि अजगर स्क्रिप्ट नाम है।

कोई सुझाव? मैं केवल यह मान सकता हूं कि मैं सीएमडी

+0

आपके पास एक लटकती खुली फ़ाइल हैंडल है। 'ओपन (फ़ाइलपाथ,' आरबी ') के साथ'h' के रूप में उपयोग करें, इसके बजाय। – 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 विस्तार के साथ दुभाषिया का टूटा हुआ सहयोग हो सकता है।

+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' से शुरू की गई स्क्रिप्ट के लिए कमांड लाइन तर्क क्यों भूल रहा था (हालांकि मिंगव 32 शेल से नहीं!)। –

-2

आप sys.argv[0] की कोशिश की? यदि len(sys.argv) = 0 तो sys.argv[1] दूसरे और nonxistent आइटम तक पहुंचने का प्रयास करेगा

2

समस्या रजिस्ट्री में है। कॉलिंग python script.py test.txt काम करता है, लेकिन यह समाधान नहीं है। विशेष रूप से यदि आप अपने पैथ में स्क्रिप्ट जोड़ने का निर्णय लेते हैं और अन्य निर्देशिकाओं के अंदर भी इसका उपयोग करना चाहते हैं।

ओपन RegEdit और HKEY_CLASSES_ROOT \ अनुप्रयोग \ python.exe \ shell \ open \ command पर नेविगेट करें। नाम (डिफ़ॉल्ट) पर राइट क्लिक करें और संशोधित करें। दर्ज करें:

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

ठीक क्लिक करें, अपने सीएमडी को पुनरारंभ करें और पुनः प्रयास करें।

संबंधित मुद्दे