Yanıtlar:
In Python 3 kullanım input()
:
input("Press Enter to continue...")
In Python 2 kullanım raw_input()
:
raw_input("Press Enter to continue...")
Bu sadece kullanıcının enter tuşuna basmasını bekler.
Biri msvcrt kullanmak isteyebilir ((yalnızca Windows / DOS) msvcrt modülü, Microsoft Visual C / C ++ Çalışma Zamanı Kitaplığı'nda (MSVCRT) bir dizi işleve erişmenizi sağlar:
import msvcrt as m
def wait():
m.getch()
Bu bir tuşa basmayı beklemelidir.
İlave bilgi:
Python 3'te raw_input()
mevcut değil
Python 2'de input(prompt)
eşdeğerdireval(raw_input(prompt))
input
herhangi bir tuşa basıldığında devam etmez, yalnızca enter tuşuna basıldığında devam etmez.
Bunu Python 2'de yapmanın bir yolu kullanmaktır raw_input()
:
raw_input("Press Enter to continue...")
Python3'te sadece input()
enter
mi?
Linux kutumda aşağıdaki kodu kullanıyorum. Bu, başka bir yerde gördüğüm koda benzer (örneğin eski python SSS'lerinde), ancak bu kod bu kodun olmadığı sıkı bir döngüde döner ve kodun bunu hesaba katmadığı çok sayıda tek köşe vakası vardır kod yapar.
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)
Sistem komutlarına bağlı olarak sorun yaşıyorsanız aşağıdakileri kullanabilirsiniz:
Linux:
import os
os.system('read -sn 1 -p "Press any key to continue..."')
print
Pencereler:
import os
os.system("pause")
system
ve sonra arayabilirsiniz sys.exit(0)
.
Sadece
input("Press Enter to continue...")
bir SyntaxError: ayrıştırma sırasında beklenen EOF'ye neden olur.
Basit düzeltme kullanımı:
try:
input("Press enter to continue")
except SyntaxError:
pass
input
Python 2'de kullanmayın - doğru işlev raw_input
. Python 2'de, buna input
eşdeğerdir eval(raw_input())
.
Python kılavuzu aşağıdakileri sağlar:
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)
kullanım durumunuza yuvarlanabilir.
Çapraz Platform, Python 2/3 kodu:
# 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
Ben IOError
s verdi ve ben gerek yoktu çünkü fctl / engelleme olmayan şeyler kaldırıldı . Bu kodu özellikle engellemek istiyorum çünkü kullanıyorum. ;)
Zeyilname:
Bunu, konsol adı verilen pek çok başka şeyle PyPI'deki bir pakette uyguladım :
>>> from console.utils import wait_key
>>> wait_key()
'h'
Bunu yapmanın platformdan bağımsız bir yolunu bilmiyorum, ancak Windows altında, msvcrt modülünü kullanıyorsanız, getch işlevini kullanabilirsiniz:
import msvcrt
c = msvcrt.getch()
print 'you entered', c
mscvcrt ayrıca bir tuşa beklemeden basıldığını görmek için engellemeyen kbhit () işlevini de içerir (karşılık gelen bir lanetler işlevi olup olmadığından emin değilsiniz). UNIX altında, curses paketi var, ancak tüm ekran çıktısı için kullanmadan kullanıp kullanamayacağınızdan emin değilsiniz. Bu kod UNIX altında çalışır:
import curses
stdscr = curses.initscr()
c = stdscr.getch()
print 'you entered', chr(c)
curses.endwin()
Curses.getch () 'in, basmam gereken aynı çıktıya sahip olması için basılan anahtarın sırasını döndürdüğünü unutmayın.
Enter'ı beklemek istiyorsanız (böylece klavyeyi kullanan kullanıcı amaçlanmayan bir şeyin olmasına neden olmaz) kullanın
sys.stdin.readline()
Python'da yeniyim ve zaten burada yapılan en basit önerileri çoğaltmak için çok aptal olduğumu düşünüyordum. Anlaşılan, kişinin bilmesi gereken bir tuzak var:
IDLE'den bir python betiği yürütüldüğünde, bazı IO komutları tamamen farklı gibi görünür (aslında terminal penceresi olmadığı için).
Örneğin. msvcrt.getch engellemez ve her zaman $ ff döndürür. Bu uzun zaman önce bildirildi (bkz. Örneğin https://bugs.python.org/issue9290 ) - ve sabit olarak işaretlendi, sorun bir şekilde python / IDLE'nin mevcut sürümlerinde devam ediyor gibi görünüyor.
Bu nedenle, yukarıda yayınlanan kodlardan herhangi biri sizin için işe yaramazsa, komut dosyasını IDLE'den DEĞİL manuel olarak çalıştırmayı deneyin .
Tam bir tuşa basıp basmadıklarını görmek istiyorsanız ('b' demek gibi) Bunu yapın:
while True:
choice = raw_input("> ")
if choice == 'b' :
print "You win"
input("yay")
break
os.system her zaman okumak için s ve n seçeneklerini tanımayan sh'yi çağırır. Ancak okuma komutu bash'a iletilebilir:
os.system("""bash -c 'read -s -n 1 -p "Press any key to continue..."'""")