python - दबाए गए कुंजी की प्रतीक्षा करने के लिए मैं पाइथन कैसे बना सकता हूं




wait keyboard-input (8)

मैं चाहता हूं कि मेरी स्क्रिप्ट तब तक प्रतीक्षा करे जब तक उपयोगकर्ता कोई भी कुंजी दबाए।

मैं उसको कैसे करू?


ओएससिस्टम हमेशा sh का आह्वान करता प्रतीत होता है, जो पढ़ने के लिए एस और एन विकल्पों को पहचानता नहीं है। हालांकि पठन कमांड को बैश में पास किया जा सकता है:

 os.system("""bash -c 'read -s -n 1 -p "Press any key to continue..."'""")

पायथन 2 में ऐसा करने का एक तरीका है raw_input() का उपयोग raw_input() :

raw_input("Press Enter to continue...")

Python3 में यह सिर्फ input()


बस उपयोग कर रहा हूँ

input("Press Enter to continue...")

एक सिंटेक्स त्रुटि का कारण बन जाएगा: पार्सिंग के दौरान अपेक्षित ईओएफ।

सरल फिक्स उपयोग:

try:
    input("Press enter to continue")
except SyntaxError:
    pass

मुझे ऐसा करने का एक प्लेटफॉर्म स्वतंत्र तरीका नहीं पता है, लेकिन विंडोज के तहत, यदि आप msvcrt मॉड्यूल का उपयोग करते हैं, तो आप इसके गेट फ़ंक्शन का उपयोग कर सकते हैं:

import msvcrt
c = msvcrt.getch()
print 'you entered', c

mscvcrt में यह देखने के लिए गैर-अवरुद्ध kbhit () फ़ंक्शन भी शामिल है कि बिना किसी प्रतीक्षा के दबाया गया था (सुनिश्चित नहीं है कि कोई संबंधित शाप फ़ंक्शन है)। यूनिक्स के तहत, शाप पैकेज है, लेकिन यह सुनिश्चित नहीं है कि आप इसे स्क्रीन आउटपुट के लिए उपयोग किए बिना इसका उपयोग कर सकते हैं। यह कोड यूनिक्स के तहत काम करता है:

import curses
stdscr = curses.initscr()
c = stdscr.getch()
print 'you entered', chr(c)
curses.endwin()

ध्यान दें कि curses.getch () दबाए गए कुंजी के क्रमिक को लौटाता है ताकि इसे उसी आउटपुट को बनाया जा सके जिसे मुझे इसे डालना था।


मैं अजगर के लिए नया हूं और मैं पहले से ही सोच रहा था कि यहां दिए गए सबसे सरल सुझावों को पुन: उत्पन्न करने के लिए मैं बहुत बेवकूफ हूं। यह पता चला है कि एक गड़बड़ है जिसे पता होना चाहिए:

जब आईडीईएल से एक पायथन-स्क्रिप्ट निष्पादित की जाती है, तो कुछ आईओ-कमांड पूरी तरह से अलग व्यवहार करते हैं (क्योंकि वास्तव में कोई टर्मिनल विंडो नहीं है)।

उदाहरण के लिए। msvcrt.getch गैर-अवरुद्ध है और हमेशा $ एफएफ देता है। यह पहले से ही बहुत पहले से रिपोर्ट किया गया है (उदाहरण के लिए https://bugs.python.org/issue9290 ) - और इसे निश्चित के रूप में चिह्नित किया गया है, किसी भी तरह की समस्या पाइथन / आईडीएलई के मौजूदा संस्करणों में जारी रहती है।

इसलिए यदि ऊपर पोस्ट किया गया कोई भी कोड आपके लिए काम नहीं करता है, तो स्क्रिप्ट को मैन्युअल रूप से चलाने का प्रयास करें, और आईडीएलई से नहीं


यदि आप देखना चाहते हैं कि उन्होंने एक सटीक कुंजी दबाई है (जैसे 'बी' कहें) ऐसा करें:

while True:
    choice = raw_input("> ")

    if choice == 'b' :
        print "You win"
        input("yay")
        break

या आप कर सकते हैं

print("This is a good joke")
print("what happened when the chicken crossed the road")
gap = input("")
if gap == (""):
    print("")
else:
    print("")
print("it died")

क्रॉस प्लेटफार्म, पायथन 2/3 कोड:

# import sys, os

def wait_key():
    ''' Wait for a key press on the console and return it. '''
    result = None
    if os.name == 'nt':
        import msvcrt
        result = msvcrt.getch()
    else:
        import termios
        fd = sys.stdin.fileno()

        oldterm = termios.tcgetattr(fd)
        newattr = termios.tcgetattr(fd)
        newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
        termios.tcsetattr(fd, termios.TCSANOW, newattr)

        try:
            result = sys.stdin.read(1)
        except IOError:
            pass
        finally:
            termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)

    return result

मैंने fctl / non-blocking stuff को हटा दिया क्योंकि यह IOError दे रहा था और मुझे इसकी आवश्यकता नहीं थी। मैं इस कोड का विशेष रूप से उपयोग कर रहा हूं क्योंकि मैं इसे अवरुद्ध करना चाहता हूं। ;)







keyboard-input