2011-11-07 6 views
7

फेंकता है एक समान प्रश्न before से पूछा गया है, लेकिन उत्तरों ने एक कार्यवाही का सुझाव दिया जो मेरी स्थिति पर लागू नहीं है।sys.stdin.read() के बाद पायथन कच्चे_इनपुट EOFError

एक ईमेल संदेश एक स्क्रिप्ट के लिए मठ से पहुंचाया जाता है, और stdin से पढ़ा जाता है:

message = sys.stdin.read() 
# message is parsed and URLs are printed as a list to choose from... 
selected_index = raw_input('Which URL to open?') 

मुझे लगता है कि raw_input को समझने() EOF पढ़ने() द्वारा छोड़ा मिल जाएगा, लेकिन वहाँ के लिए एक रास्ता है एसटीडीआईएन 'रीसेट'? का उपयोग कर STDIN पुनर्स्थापित करने के लिए

+0

आप किस सिस्टम पर हैं? लिनक्स पर, यह ठीक काम करता है! –

+0

मैक ओएस एक्स (10.7)। एलेक्स मार्टेलि ने फिर से खोलने का सुझाव दिया [यहां] (http://stackoverflow.com/questions/2197891/how-to-handle-eoferror-for-raw-input-in-python-in-mac-os-x), लेकिन यह मेरे लिए काम नहीं लग रहा है। – janeden

+0

मैंने अभी पुष्टि की है कि एक ही अपवाद जीएनयू/लिनक्स सिस्टम (सेंटोस) पर फेंक दिया गया है। जब मैं मैन्युअल रूप से एसटीडीआईएन (CTRL-D के साथ इनपुट को समाप्त करना) खिलाता हूं, तो स्क्रिप्ट ठीक काम करती है, लेकिन './script.py janeden

उत्तर

5

आप इस प्रयास किया है:

message = sys.stdin.read() 
sys.stdin = open('/dev/tty') 
selected_index = raw_input('Which URL to open?') 

यह लिनक्स पर काम करता है; शायद यह ओएसएक्स के लिए भी काम करेगा।

+0

दुर्भाग्यवश, यह काम नहीं करता है (यह मेरे पहले पोस्ट में जुड़े प्रश्न के लिए प्रस्तावित समाधान है)। संशोधित रूप में, स्क्रिप्ट raw_input फ़ंक्शन पर पहुंचने से पहले ** ** इनपुट का इंतजार कर रही है, और एक बार जब मैं वापसी करता हूं तो त्रुटि होती है। – janeden

+0

यह अजीब है - मैंने पहले कुछ गलत किया होगा: यह अब काम करता है। धन्यवाद! – janeden

+0

अच्छा हैक! लिनक्स एफटीडब्ल्यू – g33kz0r

0

कोशिश sys.stdin.seek(0)

संदर्भ: http://docs.python.org/library/fileinput.html

+0

इससे थोड़ा सा मदद मिलती है - EOFError अपवाद समाप्त हो गया है, लेकिन raw_input को पूरी तरह से अनदेखा किया जाता है (यानी उपयोगकर्ता इनपुट के लिए प्रतीक्षा किए बिना स्क्रिप्ट आय प्राप्त होती है)। – janeden

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