यह एक साधारण लूप है जो एकल अक्षरों को प्राप्त करने के लिए कच्चे मोड में स्टडीन डाल देगा (बफरिंग को अक्षम करने के लिए आपको एंटर दबाएं नहीं)। आप (अक्षम करने के with
बयान की तरह) कुछ होशियार करना चाहिए लेकिन आप यहां विचार प्राप्त:
import tty
import sys
import termios
orig_settings = termios.tcgetattr(sys.stdin)
tty.setraw(sys.stdin)
x = 0
while x != chr(27): # ESC
x=sys.stdin.read(1)[0]
print("You pressed", x)
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, orig_settings)
मुझे लगता है कि आप अजगर में महत्वपूर्ण विज्ञप्ति पता लगाने के लिए पाश होगा।
ईटीए कुछ और स्पष्टीकरण:
लिनक्स पर, अपने कार्यक्रम के लिए इनपुट लाइन हो जाएगा बफ़र। इसका अर्थ यह है कि ऑपरेटिंग सिस्टम पूरी लाइन तक इनपुट बफर करेगा, इसलिए आपका प्रोग्राम उपयोगकर्ता द्वारा टाइप किए गए कुछ भी नहीं देखेगा जब तक कि उपयोगकर्ता 'एंटर' हिट न करे। दूसरे शब्दों में, यदि आपका प्रोग्राम उपयोगकर्ता को 'डब्ल्यू' टाइप करने की उम्मीद कर रहा है और उपयोगकर्ता ऐसा करता है, तो 'डब्ल्यू' ओएस के बफर में बैठा होगा जब तक कि उपयोगकर्ता 'एंटर' हिट न करे। इस बिंदु पर पूरी लाइन आपके प्रोग्राम में वितरित की जाती है ताकि आपको उपयोगकर्ता के इनपुट के रूप में स्ट्रिंग "w \ n" मिल जाएगी।
आप टीटी को कच्चे मोड में डालकर इसे अक्षम कर सकते हैं। आप इसे पायथन फ़ंक्शन tty.setraw
के साथ करते हैं जो बफरिंग को रोकने के लिए लिनक्स में tty ड्राइवर को कॉल करने के लिए कॉल करेगा। मैंने इसे sys.stdin
तर्क दिया कि यह कहने के लिए कि मैं कौन सी धारा के लिए बफरिंग बंद करना चाहता हूं। तो tty.setraw
कॉल के बाद, ऊपर लूप आपको उपयोगकर्ता की प्रत्येक कुंजी के लिए आउटपुट देगा।
हालांकि, एक जटिलता यह है कि एक बार आपका प्रोग्राम निकलता है, तो टीटी अभी भी कच्चे मोड में है।आपको आम तौर पर यह असंतुष्ट लगता है क्योंकि आपको आधुनिक टर्मिनल सेटिंग्स की पेशकश करने वाली कोई भी शक्ति नहीं मिलती है (जैसे कि जब आप नियंत्रण या भागने के दृश्यों का उपयोग करते हैं)। उदाहरण के लिए, ध्यान दें कि आपको ctrl-C
के साथ प्रोग्राम से बाहर निकलने में परेशानी हो सकती है। नतीजतन आपको इनपुट वर्ण पढ़ने के बाद टर्मिनल को वापस पकाया गया मोड में रखना चाहिए। termios.tcsetattr
कॉल बस कहता है "टर्मिनल को जिस तरह से मैंने पाया उसे वापस रखें"। यह जानता है कि कार्यक्रम की शुरुआत में termios.tcgetattr
पर कॉल करके इसे कैसे करें, जो कह रहा है "मुझे टर्मिनल के लिए सभी मौजूदा सेटिंग्स बताएं"।
एक बार जब आप इसे समझ लेंगे, तो आपको आसानी से उस फ़ंक्शन में कार्यक्षमता को समाहित करने में सक्षम होना चाहिए जो आपके प्रोग्राम के अनुरूप है।
stdin
वह स्ट्रीम है जो उपयोगकर्ता से इनपुट आपके पास आता है। विकिपीडिया आपको standard streams के बारे में और बता सकता है।
आप कुंजी बाइंडिंग के साथ ग्राफिकल इंटरफेस देख सकते हैं tk: https://docs.python.org/3/library/tk.html – LittleByBlue