2010-08-19 12 views
14

मैं पाइथन में raw_input का उपयोग कर शैल में उपयोगकर्ता के साथ बातचीत करने के लिए उपयोग कर रहा हूं।पाइथन में raw_input डालने के बिना

c = raw_input('Press s or n to continue:') 
if c.upper() == 'S': 
    print 'YES' 

यह इरादा के रूप में कार्य करता है, लेकिन उपयोगकर्ता को 'द' दबाकर खोल में प्रवेश करना पड़ता है। क्या खोल में प्रवेश करने की आवश्यकता के बिना मुझे उपयोगकर्ता इनपुट से जो चाहिए उसे पूरा करने का कोई तरीका है? मैं * निक्स मशीनों का उपयोग कर रहा हूँ।

+0

[http://stackoverflow.com/questions/292095/polling-the-keyboard-in-python](http://stackoverflow .com/प्रश्न/2 9 20 9 5/मतदान-द-कीबोर्ड-इन-पायथन) –

+0

इस पृष्ठ को देखें। यह ttyl मॉड्यूल का उपयोग करता है और केवल दो लाइनें है। बस ord() कमांड को छोड़ दें: http://stackoverflow.com/questions/575650/how-to-obtain-the-keycodes-in-python – incognick

उत्तर

11

विंडोज के अंतर्गत, आप msvcrt मॉड्यूल की जरूरत है, विशेष रूप से, जिस तरह से आप अपनी समस्या का वर्णन से लगता है, समारोह msvcrt.getch:

एक कुंजी दबाने पढ़ें और जिसके परिणामस्वरूप चरित्र लौट आते हैं। कंसोल पर कुछ भी गूंज नहीं है। यह कॉल को अवरुद्ध कर देगी यदि कोई कीप्रेस पहले से ही उपलब्ध नहीं है, लेकिन दबाए जाने के लिए दर्ज करने की प्रतीक्षा नहीं करेगा।

(आदि - जिन दस्तावेज़ों को मैंने अभी इंगित किया है) देखें। यूनिक्स के लिए, उदा। देखें this recipe एक समान getch फ़ंक्शन बनाने के लिए एक आसान तरीके के लिए (उस नुस्खा के टिप्पणी धागे में कई विकल्प & सी देखें)।

+0

यह इरादा के रूप में कार्य करता है, और एक क्रॉस-प्लेटफ़ॉर्म समाधान बहुत अच्छा है। जवाब के लिए धन्यवाद! –

+0

@ कुछ, आपका स्वागत है! –

+0

सीधे https://pypi.python.org/pypi/readchar पर जाएं, ऐसा लगता है, हालांकि मुझे ओएसएक्स पर तीर कुंजियों को ठीक से पढ़ने के लिए नहीं मिल रहा है। – boxed

8

पायथन बॉक्स से बाहर एक बहुउद्देश्यीय समाधान प्रदान नहीं करता है।
आप के साथ msvcrt की कोशिश कर सकते आप Windows पर हैं:

import msvcrt 
print 'Press s or n to continue:\n' 
input_char = msvcrt.getch() 
if input_char.upper() == 'S': 
    print 'YES' 
+0

मैं इस मॉड्यूल में आया हूं, लेकिन मुझे इसे * निक्स पर काम करने की आवश्यकता है। फिर भी धन्यवाद! –

3

msvcrt मॉड्यूल के बजाय आप भी WConio इस्तेमाल कर सकते हैं:

>>> import WConio 
>>> ans = WConio.getkey() 
>>> ans 
'y' 
1

एक तरफ ध्यान दें पर, msvcrt.kbhit() की ओर से एक बूलियन मान निर्धारित करता है कि कीबोर्ड पर कोई भी कुंजी वर्तमान में दबाई जा रही है या नहीं।

तो यदि आप कोई गेम या कुछ बना रहे हैं और कुंजीपेशियों को चीजों को करने के लिए चाहते हैं लेकिन पूरी तरह से गेम को रोक नहीं सकते हैं, तो आप यह सुनिश्चित करने के लिए कि अगर वास्तव में उपयोगकर्ता को पुनर्प्राप्त किया जाता है तो कुंजी केवल kbhit() का उपयोग कर सकती है कुछ करना चाहता है

अजगर 3 में एक उदाहरण:

# this would be in some kind of check_input function 
if msvcrt.kbhit(): 
    key = msvcrt.getch().decode("utf-8").lower() # getch() returns bytes data that we need to decode in order to read properly. i also forced lowercase which is optional but recommended 
    if key == "w": # here 'w' is used as an example 
     # do stuff 
    elif key == "a": 
     # do other stuff 
    elif key == "j": 
     # you get the point 
1

एकल वर्ण प्राप्त करने के लिए, मैं getch का इस्तेमाल किया है, लेकिन मैं नहीं जानता कि अगर यह विंडोज पर काम करता है।

2

शाप कि रूप में अच्छी तरह कर सकते हैं:

import curses, time 

#-------------------------------------- 
def input_char(message): 
    try: 
     win = curses.initscr() 
     win.addstr(0, 0, message) 
     while True: 
      ch = win.getch() 
      if ch in range(32, 127): break 
      time.sleep(0.05) 
    except: raise 
    finally: 
     curses.endwin() 
    return chr(ch) 
#-------------------------------------- 
c = input_char('Press s or n to continue:') 
if c.upper() == 'S': 
    print 'YES' 
संबंधित मुद्दे