2012-09-22 14 views
32
while True: 
    reply = input('Enter text') 
    if reply == 'stop': break 
    print(reply.upper()) 

परिणाम था:अजगर 3: EOF जब एक लाइन पढ़ने (उदात्त पाठ 2 नाराज है)

Enter text:Traceback (most recent call last): 
    File "C:\PythonProjects\5.py", line 2, in <module> 
    reply = input('Enter text:') 
EOFError: EOF when reading a line 
[Finished in 0.2s with exit code 1] 

यह केवल उदात्त पाठ 2 में मैं निष्क्रिय करने की कोशिश की है, की कोशिश की कमान लाइन, सब कुछ सही है। सुलेमे मुझे क्यों चिल्लाए?

वैसे, शायद आप यह भी समझा सकते हैं कि ऐसी स्थिति में ईओएफ का क्या अर्थ हो सकता है। बेशक, मैंने प्रलेखन में पढ़ा है, कि अगर इनपुट से ईओएफ पढ़ा जाता है, तो उचित त्रुटि उठाई जाती है। मैं इस स्थिति को मॉडल करना चाहता हूं। केवल कीबोर्ड के बारे में इनपुट है? यदि हां, तो ईओएफ प्राप्त करने के लिए मुझे किन कुंजीों का इनपुट करना चाहिए?

अग्रिम धन्यवाद।

+0

आपके शेष प्रश्न के बारे में निश्चित नहीं है, लेकिन ईओएफ आमतौर पर 'ctrl' + 'd' – AGS

उत्तर

10

ईओएफ एक विशेष आउट-ऑफ-बैंड सिग्नल है जिसका अर्थ है इनपुट का अंत। यह एक चरित्र नहीं है (हालांकि पुराने डॉस दिनों में, 0x1B ईओएफ की तरह काम करता है), बल्कि ओएस से संकेत है कि इनपुट समाप्त हो गया है।

विंडोज़ पर, आप कमांड प्रॉम्प्ट पर Ctrl+Z दबाकर एक ईओएफ "इनपुट" कर सकते हैं। यह टर्मिनल को इनपुट स्ट्रीम को बंद करने के लिए संकेत देता है, जो चल रहे प्रोग्राम के लिए एक ईओएफ प्रस्तुत करता है। ध्यान दें कि अन्य ओएस या टर्मिनल अनुकरणकर्ताओं पर, ईओएफ आमतौर पर Ctrl+D का उपयोग करके संकेतित किया जाता है।

उदात्त पाठ 2 के साथ अपने मुद्दे का सवाल है, ऐसा लगता है कि stdin जब उदात्त के भीतर एक कार्यक्रम चलाने के टर्मिनल से जुड़ा नहीं है, और इसलिए फलस्वरूप कार्यक्रमों एक खाली फ़ाइल (शायद nul या /dev/null) से जुड़ा शुरू। Python 3.1 and Sublime Text 2 error भी देखें।

+0

है क्या स्टडीन को सही तरीके से कनेक्ट करने का कोई तरीका है ताकि आप टर्मिनल में इनपुट कर सकें? – TheTedinator

+0

मैं व्यक्तिगत रूप से सब्लिम का उपयोग नहीं करता, लेकिन ऐसा लगता है कि [SublimeREPL] स्थापित करने का प्रमुख सुझाव है (http://sublimerepl.readthedocs.org/en/latest/)। – nneonneo

9

help(input) शो क्या कीबोर्ड शॉर्टकट EOF उत्पादन, अर्थात्, यूनिक्स: Ctrl-D, विंडोज: Ctrl-Z + वापसी:

इनपुट ([शीघ्र]) -> स्ट्रिंग

मानक इनपुट से एक स्ट्रिंग पढ़ें। पिछली नई लाइन छीन ली गई है। यदि उपयोगकर्ता EOF (यूनिक्स: सीटीएल-डी, विंडोज़: सीटीएल-जेड + रिटर्न) हिट करता है, तो EOFError बढ़ाएं। यूनिक्स पर, सक्षम होने पर जीएनयू रीडलाइन का उपयोग किया जाता है। संकेत स्ट्रिंग, यदि दिया गया है, तो पढ़ने से पहले एक पिछली नई लाइन के बिना मुद्रित किया गया है।

आप एक रिक्त फ़ाइल का उपयोग कर इसे पुन: पेश कर सकते हैं:

$ touch empty 
$ python3 -c "input()" < empty 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
EOFError: EOF when reading a line 

आप /dev/null या nul (विंडोज़) इस्तेमाल कर सकते हैं पढ़ने के लिए एक खाली फ़ाइल के रूप में।

$ python3 -c "import os; print(os.devnull)" 
/dev/null 

नोट:: input() खुशी से एक फ़ाइल/पाइप से इनपुट स्वीकार करता है os.devnull नाम है कि अपने ओएस द्वारा प्रयोग किया जाता है पता चलता है।आप stdin की जरूरत नहीं है टर्मिनल से जुड़े होने की:

$ echo abc | python3 -c "print(input()[::-1])" 
cba 

या तो अपने कोड में EOFError संभाल:

try: 
    reply = input('Enter text') 
except EOFError: 
    break 

या अपने संपादक कॉन्फ़िगर एक गैर खाली इनपुट प्रदान करने के जब यह अपनी स्क्रिप्ट चलाता है उदाहरण के लिए, एक अनुकूलित कमांड लाइन का उपयोग करके यदि यह अनुमति देता है: python3 "%f" < input_file

32

मुझे एक ही समस्या थी। सब्लिमे टेक्स्ट के डिफ़ॉल्ट कंसोल के साथ समस्या यह है कि यह इनपुट का समर्थन नहीं करता है।

इसे हल करने के लिए, आपको SublimeREPL नामक एक पैकेज स्थापित करना होगा। SublimeREPL एक पायथन दुभाषिया प्रदान करता है जो इनपुट स्वीकार करता है।

एक article है जो समाधान को विस्तार से बताता है।

GitHub page for SublimeREPL

5

ऐसा लगता है अब के रूप में, एकमात्र समाधान SublimeREPL स्थापित करने के लिए अभी भी है।

राघव के उत्तर पर विस्तार करने के लिए, टूल-> SublimeREPL-> पायथन-> रन कमांड में जाने के लिए हर बार जब आप इनपुट के साथ स्क्रिप्ट चलाने के लिए चाहते हैं, तो बहुत परेशान हो सकता है, इसलिए मैंने एक त्वरित कुंजी बाध्यकारी बनाया कि काम हो सकता है:

इसे सक्षम करने के वरीयताएं- पर जाएं> कुंजी बाइंडिंग - उपयोगकर्ता, और वहाँ में इस कॉपी: स्वाभाविक रूप से

[ 
    {"keys":["ctrl+r"] , 
    "caption": "SublimeREPL: Python - RUN current file", 
    "command": "run_existing_window_command", 
    "args": 
     { 
      "id": "repl_python_run", 
      "file": "config/Python/Main.sublime-menu" 
     } 
    }, 
] 

, तुम बस के लिए "कुंजी" तर्क परिवर्तन होगा जो भी आप चाहें शॉर्टकट बदलें।

-2
try: 
    value = raw_input() 
    do_stuff(value) # next line was found 
except (EOFError): 
    break #end of file reached 

यह पाइप इनपुट से इनपुट की धारा के अंत से निपटने के दौरान कच्चे_इनपुट का उचित उपयोग प्रतीत होता है। [इस पोस्ट का संदर्भ लें] [1]

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