2010-05-04 5 views
5

मैं चाहता हूं कि कोई कंसोल में शब्दों को टाइप करे, और जब वे "टैब" कुंजी दबाएंगे तो एक सूची से स्वत: पूर्ण हो जाएं। हालांकि, raw_input किसी स्ट्रिंग को तब तक नहीं लौटाएगा जब तक कि कोई व्यक्ति [एंटर] हिट नहीं करता।पायथन कच्चे_इनपुट प्राप्त करते हैं लेकिन मैन्युअल रूप से तय करते हैं कि स्ट्रिंग कब किया जाता है

जब तक उपयोगकर्ता हिट नहीं करता तब तक मैं चर के अक्षरों को कैसे पढ़ूं? [Enter]?

* नोट: मैं ओएस मुद्दों के कारण स्वत: पूर्णता के लिए import readline का उपयोग नहीं करना चाहता हूं।

उत्तर

5

इस प्रश्न पर एक आधिकारिक सामान्य प्रश्न प्रविष्टि, यूनिक्स के लिए है: http://www.python.org/doc/faq/library/#how-do-i-get-a-single-keypress-at-a-time

संपादित (नीचे डोनल अध्येताओं 'टिप्पणी से नकल): डिफ़ॉल्ट रूप से पकाया जाता है "मोड" समस्या यह है कि टर्मिनल में है कि " (सरल रेखा संपादन की इजाजत देता है) और यह कि कुंजी टाइप किए जाने के लिए, इसे "कच्चे" मोड में रखा जाना चाहिए। " (धन्यवाद!)

+1

निश्चित रूप से सही जवाब। आप उसमें संपादित करना चाहते हैं कि समस्या यह है कि टर्मिनल डिफ़ॉल्ट रूप से "पकाया गया" मोड में है (सरल रेखा संपादन की इजाजत देता है) और यह कि कुंजी टाइप किए जाने के लिए, इसे "कच्चे" मोड में रखा जाना चाहिए। और उस समय प्रश्नकर्ता को भी खराब टाइपिंग और अन्य चीजों के बारे में चिंता करने की ज़रूरत है, जो ओएस आमतौर पर उनके लिए करता है। –

1

sys.stdin पर * nix उपयोग select पर में एक चरित्र के लिए इंतजार करना है, तो .read() यह। पर विंडोज msvcrt.kbhit() और msvcrt.getch() का उपयोग करें।

+0

क्या आप इस समाधान पर विस्तार कर सकते हैं? मैं इसे लागू करने में असफल रहा, चुनिंदा मॉड्यूल से अपरिचित होने ...:/ – EOL

+0

@EOL: "अपरिचित" का क्या अर्थ है? शायद आपको (1) कुछ कोड लिखना चाहिए (2) उस कोड के साथ आपके पास किसी भी विशिष्ट समस्या पर एक अलग प्रश्न पूछें। –

+0

@ एसएलॉट: निम्नलिखित कोड पहले चरित्र को नहीं पकड़ता है, लेकिन प्रवेश तक दबाए जाने तक प्रतीक्षा करता है: 'आयात का चयन करें, sys; char = select.select ([sys.stdin], [], []) [0] [0] .read (1); प्रिंट करें "% s"% char' पढ़ें। शायद यह इस तथ्य के कारण है कि मैं 'चयन' मॉड्यूल से अपरिचित हूं, और यह नहीं जानता कि इसका उपयोग कैसे किया जाए। :) – EOL