Jawaban:
Dalam Python 3 gunakan input()
:
input("Press Enter to continue...")
Dalam Python 2 gunakan raw_input()
:
raw_input("Press Enter to continue...")
Ini hanya menunggu pengguna menekan enter.
Seseorang mungkin ingin menggunakan msvcrt ((hanya Windows / DOS) Modul msvcrt memberi Anda akses ke sejumlah fungsi di Microsoft Visual C / C ++ Runtime Library (MSVCRT)):
import msvcrt as m
def wait():
m.getch()
Ini harus menunggu penekanan tombol.
Informasi tambahan:
dalam Python 3 raw_input()
tidak ada
Dalam Python 2 input(prompt)
setara denganeval(raw_input(prompt))
input
tidak melanjutkan jika ada tombol yang ditekan, hanya jika enter ditekan.
Salah satu cara untuk melakukan ini dalam Python 2, adalah dengan menggunakan raw_input()
:
raw_input("Press Enter to continue...")
Dalam python3 hanya saja input()
enter
?
input()
.
Di kotak linux saya, saya menggunakan kode berikut. Ini mirip dengan kode yang pernah saya lihat di tempat lain (dalam python lama FAQs misalnya) tetapi kode itu berputar dalam loop ketat di mana kode ini tidak dan ada banyak kasus sudut aneh bahwa kode tidak menjelaskan bahwa ini kode tidak.
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)
Jika Anda setuju dengan tergantung pada perintah sistem Anda dapat menggunakan yang berikut:
Linux:
import os
os.system('read -sn 1 -p "Press any key to continue..."')
print
Windows:
import os
os.system("pause")
system
dan kemudian menelepon sys.exit(0)
.
Cukup menggunakan
input("Press Enter to continue...")
akan menyebabkan SyntaxError: EOF yang diharapkan saat parsing.
Penggunaan perbaikan sederhana:
try:
input("Press enter to continue")
except SyntaxError:
pass
input
di python 2 - fungsi yang benar adalah raw_input
. Dalam python 2, input
sama dengan eval(raw_input())
.
Manual python menyediakan yang berikut:
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)
yang dapat digulung ke dalam use case Anda.
Cross Platform, kode Python 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
Saya menghapus hal-hal fctl / non-blocking karena memberi IOError
dan saya tidak membutuhkannya. Saya menggunakan kode ini secara khusus karena saya ingin memblokirnya. ;)
Tambahan:
Saya menerapkan ini dalam sebuah paket di PyPI dengan banyak barang lain yang disebut konsol :
>>> from console.utils import wait_key
>>> wait_key()
'h'
Saya tidak tahu cara platform independen untuk melakukannya, tetapi di bawah Windows, jika Anda menggunakan modul msvcrt, Anda dapat menggunakan fungsi getch-nya:
import msvcrt
c = msvcrt.getch()
print 'you entered', c
mscvcrt juga menyertakan fungsi kbhit () non-blocking untuk melihat apakah suatu tombol ditekan tanpa menunggu (tidak yakin apakah ada fungsi kutukan yang sesuai). Di bawah UNIX, ada paket kutukan, tetapi tidak yakin apakah Anda dapat menggunakannya tanpa menggunakannya untuk semua output layar. Kode ini berfungsi di bawah UNIX:
import curses
stdscr = curses.initscr()
c = stdscr.getch()
print 'you entered', chr(c)
curses.endwin()
Perhatikan bahwa curses.getch () mengembalikan ordinal tombol yang ditekan sehingga untuk membuatnya memiliki output yang sama saya harus melemparkannya.
Jika Anda ingin menunggu untuk masuk (sehingga pengguna mengetuk keyboard tidak menyebabkan sesuatu yang tidak diinginkan terjadi) gunakan
sys.stdin.readline()
Saya baru mengenal python dan saya sudah berpikir saya terlalu bodoh untuk mereproduksi saran sederhana yang dibuat di sini. Ternyata, ada jebakan yang harus diketahui:
Ketika skrip python dijalankan dari IDLE, beberapa perintah-IO tampaknya berperilaku sangat berbeda (karena sebenarnya tidak ada jendela terminal).
Misalnya. msvcrt.getch adalah non-blocking dan selalu mengembalikan $ ff. Ini sudah dilaporkan sejak lama (lihat mis. Https://bugs.python.org/issue9290 ) - dan ditandai sebagai diperbaiki, entah bagaimana masalahnya tetap ada di versi python / IDLE saat ini.
Jadi jika salah satu kode yang diposting di atas tidak berfungsi untuk Anda, coba jalankan skrip secara manual, dan BUKAN dari IDLE .
Jika Anda ingin melihat apakah mereka menekan tombol yang tepat (seperti katakan 'b') Lakukan ini:
while True:
choice = raw_input("> ")
if choice == 'b' :
print "You win"
input("yay")
break
os.sistem tampaknya selalu memanggil sh, yang tidak mengenali opsi s dan n untuk dibaca. Namun perintah baca dapat diteruskan ke bash:
os.system("""bash -c 'read -s -n 1 -p "Press any key to continue..."'""")