जवाबों:
में अजगर 3 उपयोग input()
:
input("Press Enter to continue...")
में अजगर 2 उपयोग raw_input()
:
raw_input("Press Enter to continue...")
यह केवल उपयोगकर्ता के लिए हालांकि एंटर प्रेस करने की प्रतीक्षा करता है।
Msvcrt ((केवल Windows / DOS) का उपयोग करना चाहते हैं । msvcrt मॉड्यूल आपको Microsoft Visual C / C ++ रनटाइम लाइब्रेरी (MSVCRT) में कई कार्यों तक पहुँच प्रदान करता है:
import msvcrt as m
def wait():
m.getch()
इसके लिए एक प्रमुख प्रेस का इंतजार करना चाहिए।
अतिरिक्त जानकारी:
अजगर 3 में raw_input()
मौजूद नहीं है
अजगर में 2 input(prompt)
के बराबर हैeval(raw_input(prompt))
input
जारी नहीं रखा जाता है यदि कोई कुंजी दबाया जाता है, केवल दर्ज करने पर दबाया जाता है।
पायथन 2 में ऐसा करने का एक तरीका, उपयोग करना है raw_input()
:
raw_input("Press Enter to continue...")
Python3 में यह सिर्फ है input()
enter
?
input()
।
मेरे लिनक्स बॉक्स पर, मैं निम्नलिखित कोड का उपयोग करता हूं। यह उस कोड के समान है जिसे मैंने कहीं और देखा है (उदाहरण के लिए पुराने अजगर FAQs में), लेकिन यह कोड एक तंग लूप में घूमता है, जहां यह कोड नहीं होता है और कई विषम कोने मामले होते हैं जो कोड उस के लिए खाता नहीं है कोड करता है।
def read_single_keypress():
"""Waits for a single keypress on stdin.
This is a silly function to call if you need to do it a lot because it has
to store stdin's current setup, setup stdin for reading single keystrokes
then read the single keystroke then revert stdin back after reading the
keystroke.
Returns a tuple of characters of the key that was pressed - on Linux,
pressing keys like up arrow results in a sequence of characters. Returns
('\x03',) on KeyboardInterrupt which can happen when a signal gets
handled.
"""
import termios, fcntl, sys, os
fd = sys.stdin.fileno()
# save old state
flags_save = fcntl.fcntl(fd, fcntl.F_GETFL)
attrs_save = termios.tcgetattr(fd)
# make raw - the way to do this comes from the termios(3) man page.
attrs = list(attrs_save) # copy the stored version to update
# iflag
attrs[0] &= ~(termios.IGNBRK | termios.BRKINT | termios.PARMRK
| termios.ISTRIP | termios.INLCR | termios. IGNCR
| termios.ICRNL | termios.IXON )
# oflag
attrs[1] &= ~termios.OPOST
# cflag
attrs[2] &= ~(termios.CSIZE | termios. PARENB)
attrs[2] |= termios.CS8
# lflag
attrs[3] &= ~(termios.ECHONL | termios.ECHO | termios.ICANON
| termios.ISIG | termios.IEXTEN)
termios.tcsetattr(fd, termios.TCSANOW, attrs)
# turn off non-blocking
fcntl.fcntl(fd, fcntl.F_SETFL, flags_save & ~os.O_NONBLOCK)
# read a single keystroke
ret = []
try:
ret.append(sys.stdin.read(1)) # returns a single character
fcntl.fcntl(fd, fcntl.F_SETFL, flags_save | os.O_NONBLOCK)
c = sys.stdin.read(1) # returns a single character
while len(c) > 0:
ret.append(c)
c = sys.stdin.read(1)
except KeyboardInterrupt:
ret.append('\x03')
finally:
# restore old state
termios.tcsetattr(fd, termios.TCSAFLUSH, attrs_save)
fcntl.fcntl(fd, fcntl.F_SETFL, flags_save)
return tuple(ret)
यदि आप सिस्टम कमांड के आधार पर ठीक हैं तो आप निम्नलिखित का उपयोग कर सकते हैं:
लिनक्स:
import os
os.system('read -sn 1 -p "Press any key to continue..."')
print
खिड़कियाँ:
import os
os.system("pause")
system
और फिर कॉल कर सकते हैं sys.exit(0)
।
बस का उपयोग कर
input("Press Enter to continue...")
एक SyntaxError का कारण होगा: पार्स करते समय अपेक्षित EOF।
सरल ठीक उपयोग:
try:
input("Press enter to continue")
except SyntaxError:
pass
input
अजगर 2 में उपयोग न करें - सही कार्य है raw_input
। अजगर 2 में, input
के बराबर है eval(raw_input())
।
अजगर मैनुअल निम्नलिखित प्रदान करता है:
import termios, fcntl, sys, os
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)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
try:
while 1:
try:
c = sys.stdin.read(1)
print "Got character", repr(c)
except IOError: pass
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
जिसे आपके उपयोग के मामले में रोल किया जा सकता है।
क्रॉस प्लेटफ़ॉर्म, पायथन 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 / गैर-अवरुद्ध सामान को हटा दिया क्योंकि यह IOError
एस दे रहा था और मुझे इसकी आवश्यकता नहीं थी। मैं इस कोड का विशेष रूप से उपयोग कर रहा हूं क्योंकि मैं इसे ब्लॉक करना चाहता हूं। ;)
परिशिष्ट:
मैंने इसे PyPI पर एक पैकेज में लागू किया है, जिसमें कंसोल नामक कई अन्य उपहार हैं :
>>> from console.utils import wait_key
>>> wait_key()
'h'
मैं इसे करने के लिए एक स्वतंत्र मंच के बारे में नहीं जानता, लेकिन विंडोज के तहत, यदि आप msvcrt मॉड्यूल का उपयोग करते हैं, तो आप इसका उपयोग कर सकते हैं:
import msvcrt
c = msvcrt.getch()
print 'you entered', c
mscvcrt में गैर-अवरुद्ध kbhit () फ़ंक्शन भी शामिल है, यह देखने के लिए कि क्या प्रतीक्षा के बिना एक कुंजी दबाया गया था (यह सुनिश्चित नहीं होता है कि क्या संबंधित शाप फ़ंक्शन है)। UNIX के तहत, शाप पैकेज है, लेकिन यह सुनिश्चित नहीं है कि आप इसे स्क्रीन आउटपुट के सभी के लिए उपयोग किए बिना उपयोग कर सकते हैं। यह कोड UNIX के तहत काम करता है:
import curses
stdscr = curses.initscr()
c = stdscr.getch()
print 'you entered', chr(c)
curses.endwin()
ध्यान दें कि शाप।गेट () कुंजी के क्रमिक रिटर्न को दबाया जाता है ताकि यह वही आउटपुट हो जो मुझे इसे डालना था।
यदि आप प्रवेश के लिए प्रतीक्षा करना चाहते हैं (ताकि कीबोर्ड खटखटाने वाला उपयोगकर्ता अनहोनी का कारण न बने) का उपयोग करें
sys.stdin.readline()
मैं अजगर के लिए नया हूं और मैं पहले से ही सोच रहा था कि मैं यहां किए गए सबसे सरल सुझावों को पुन: पेश करने के लिए बहुत बेवकूफ हूं। यह पता चला है, एक नुकसान होना चाहिए जिसे जानना चाहिए:
जब IDLE से एक अजगर-स्क्रिप्ट निष्पादित होती है, तो कुछ IO- कमांड पूरी तरह से अलग व्यवहार करते हैं (जैसा कि वास्तव में कोई टर्मिनल विंडो नहीं है)।
उदाहरण के लिए। msvcrt.getch गैर-अवरुद्ध है और हमेशा $ ff देता है। यह बहुत पहले ही रिपोर्ट किया जा चुका है (उदाहरण https://bugs.python.org/issue9290 देखें ) - और यह तय के रूप में चिह्नित है, किसी तरह समस्या अजगर / आईडीएल के वर्तमान संस्करणों में बनी रहती है।
इसलिए यदि ऊपर दिया गया कोई भी कोड आपके लिए काम नहीं करता है, तो स्क्रिप्ट को मैन्युअल रूप से चलाने का प्रयास करें, और आईडीएलई से नहीं ।
यदि आप यह देखना चाहते हैं कि क्या उन्होंने एक सटीक कुंजी दबाया है (जैसे 'बी' कहो) ऐसा करें:
while True:
choice = raw_input("> ")
if choice == 'b' :
print "You win"
input("yay")
break
os.system हमेशा श को आह्वान करता प्रतीत होता है, जो पढ़ने के लिए s और n विकल्पों की पहचान नहीं करता है। हालाँकि वाचन कमांड को पास किया जा सकता है:
os.system("""bash -c 'read -s -n 1 -p "Press any key to continue..."'""")