Làm cách nào để làm cho tập lệnh Python của tôi đợi cho đến khi người dùng nhấn bất kỳ phím nào?
Mateen Ulhaq
22.7K16 Huy hiệu vàng88 Huy hiệu bạc128 Huy hiệu đồng16 gold badges88 silver badges128 bronze badges
Đã hỏi ngày 11 tháng 6 năm 2009 lúc 20:09Jun 11, 2009 at 20:09
Trong Python 3, sử dụng
raw_input["Press Enter to continue..."]
8:Python 3, use raw_input["Press Enter to continue..."]
8:input["Press Enter to continue..."]
Trong Python 2, sử dụng
raw_input["Press Enter to continue..."]
9:Python 2, use raw_input["Press Enter to continue..."]
9:raw_input["Press Enter to continue..."]
Điều này chỉ chờ người dùng nhấn ENTER mặc dù.
Trên Windows/DOS, người ta có thể muốn sử dụng
import msvcrt as m
def wait[]:
m.getch[]
0. Mô -đun import msvcrt as m
def wait[]:
m.getch[]
0 cho phép bạn truy cập vào một số chức năng trong Thư viện thời gian chạy C/C ++ của Microsoft Visual [MSVCRT]:import msvcrt as m
def wait[]:
m.getch[]
Điều này nên chờ một máy ép chìa khóa.
Notes:
Trong Python 3,
raw_input["Press Enter to continue..."]
9 không tồn tại. Trong Python 2, import msvcrt as m
def wait[]:
m.getch[]
3 tương đương với import msvcrt as m
def wait[]:
m.getch[]
4.In Python 2,
import msvcrt as m
def wait[]:
m.getch[]
3 is equivalent to import msvcrt as m
def wait[]:
m.getch[]
4.
Mateen Ulhaq
22.7K16 Huy hiệu vàng88 Huy hiệu bạc128 Huy hiệu đồng16 gold badges88 silver badges128 bronze badges
Đã hỏi ngày 11 tháng 6 năm 2009 lúc 20:09Jul 16, 2009 at 1:48
Trong Python 3, sử dụng
raw_input["Press Enter to continue..."]
8:rizaTrong Python 2, sử dụng
9:7 gold badges28 silver badges29 bronze badgesraw_input["Press Enter to continue..."]
8
Trong Python 3, sử dụng
raw_input["Press Enter to continue..."]
8:input["Press Enter to continue..."]
Trong Python 2, sử dụng
raw_input["Press Enter to continue..."]
9:raw_input["Press Enter to continue..."]
Mateen Ulhaq
22.7K16 Huy hiệu vàng88 Huy hiệu bạc128 Huy hiệu đồng16 gold badges88 silver badges128 bronze badges
Đã hỏi ngày 11 tháng 6 năm 2009 lúc 20:09Jun 11, 2009 at 20:11
Trong Python 3, sử dụng
raw_input["Press Enter to continue..."]
8:Greg HewgillTrong Python 2, sử dụng
9:178 gold badges1134 silver badges1268 bronze badgesraw_input["Press Enter to continue..."]
2
Điều này chỉ chờ người dùng nhấn ENTER mặc dù.
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]
Trên Windows/DOS, người ta có thể muốn sử dụng
import msvcrt as m
def wait[]:
m.getch[]
0. Mô -đun import msvcrt as m
def wait[]:
m.getch[]
0 cho phép bạn truy cập vào một số chức năng trong Thư viện thời gian chạy C/C ++ của Microsoft Visual [MSVCRT]:Jul 6, 2011 at 15:58
Điều này nên chờ một máy ép chìa khóa.mheyman
Trong Python 3,
9 không tồn tại. Trong Python 2, raw_input["Press Enter to continue..."]
3 tương đương với import msvcrt as m
def wait[]:
m.getch[]
4.35 silver badges33 bronze badgesimport msvcrt as m
def wait[]:
m.getch[]
7
Đã trả lời ngày 16 tháng 7 năm 2009 lúc 1:48
from __future__ import print_function
import os
import platform
if platform.system[] == "Windows":
os.system["pause"]
else:
os.system["/bin/bash -c 'read -s -n 1 -p \"Press any key to continue...\"'"]
print[]
Rizariza
15,5K7 Huy hiệu vàng28 Huy hiệu bạc29 Huy hiệu đồngJun 5, 2013 at 6:36
Đã trả lời ngày 11 tháng 6 năm 2009 lúc 20:11CrouZ
Greg Hewgillgreg Hewgill17 silver badges17 bronze badges
9
918K178 Huy hiệu vàng1134 Huy hiệu bạc1268 Huy hiệu đồng
input["Press Enter to continue..."]
Trên hộp Linux của tôi, tôi sử dụng mã sau. Điều này tương tự như mã tôi đã thấy ở nơi khác [ví dụ như trong Câu hỏi thường gặp về Python cũ] nhưng mã đó quay trong một vòng lặp chặt chẽ trong đó mã này không và có rất nhiều trường hợp góc kỳ lạ mà mã không tính đến điều này Mã không.
Đã trả lời ngày 6 tháng 7 năm 2011 lúc 15:58
Mheymanmheyman
try:
input["Press enter to continue"]
except SyntaxError:
pass
4.06435 Huy hiệu bạc33 Huy hiệu đồng
Nếu bạn ổn với việc tùy thuộc vào các lệnh hệ thống bạn có thể sử dụng:1 gold badge17 silver badges27 bronze badges
Nó đã được xác minh để làm việc với Python 2 và 3 trên Windows, Linux và Mac OS X.Mar 3, 2014 at 16:06
Đã trả lời ngày 5 tháng 6 năm 2013 lúc 6:36alltrue
Crouzcrouz4 silver badges5 bronze badges
4
1.64917 Huy hiệu bạc17 Huy hiệu đồng
# 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.getwch[]
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
Đơn giản chỉ cần sử dụng
Addendum:
sẽ gây ra lỗi sau khi sử dụng Python 2:
raw_input["Press Enter to continue..."]
0Cú pháp: Dự kiến EOF trong khi phân tích cú pháp.Jan 22, 2016 at 22:10
Khắc phục đơn giản để mã hoạt động trên cả Python 2 và Python 3 là sử dụng:Gringo Suave
Ahmed Akhtar6 gold badges84 silver badges74 bronze badges
5
1.4261 Huy hiệu vàng17 Huy hiệu bạc27 Huy hiệu đồng
raw_input["Press Enter to continue..."]
1Đã trả lời ngày 3 tháng 3 năm 2014 lúc 16:06
Alltruealltrue
5754 Huy hiệu bạc5 Huy hiệu Đồng31 gold badges170 silver badges244 bronze badges
Nền tảng chéo, mã Python 2/3:Feb 15, 2011 at 13:09
4
Tôi đã loại bỏ các thứ FCTL/không chặn vì nó đã cho
import msvcrt as m
def wait[]:
m.getch[]
7 và tôi không cần nó. Tôi đang sử dụng mã này cụ thể vì tôi muốn nó chặn. ;]raw_input["Press Enter to continue..."]
2Tôi đã thực hiện điều này trong một gói trên PYPI với rất nhiều goodies khác được gọi là Console:
raw_input["Press Enter to continue..."]
3Đã trả lời ngày 22 tháng 1 năm 2016 lúc 22:10
Gringo Suavegringo SuaveMay 17, 2011 at 21:42
28.6K6 Huy hiệu vàng84 Huy hiệu bạc74 Huy hiệu đồngJohn Gaines Jr.
Hướng dẫn Python cung cấp những điều sau đây:1 gold badge25 silver badges25 bronze badges
1
có thể được đưa vào trường hợp sử dụng của bạn.
Richard
52.4K31 Huy hiệu vàng170 Huy hiệu bạc244 Huy hiệu đồng
Đã trả lời ngày 15 tháng 2 năm 2011 lúc 13:09NOT from IDLE.
Tôi không biết một cách thực hiện độc lập của nền tảng, nhưng trong Windows, nếu bạn sử dụng mô -đun MSVCRT, bạn có thể sử dụng chức năng Getch của nó:Jul 28, 2016 at 21:47
MSCVCRT cũng bao gồm hàm kbhit [] không chặn để xem liệu khóa có được nhấn mà không chờ không [không chắc chắn có chức năng Curses tương ứng không]. Trong Unix, có gói Curses, nhưng không chắc bạn có thể sử dụng nó mà không sử dụng nó cho tất cả các đầu ra màn hình hay không. Mã này hoạt động theo Unix:ralfiii
Lưu ý rằng lời nguyền.getch [] trả về thứ tự của phím được nhấn để làm cho nó có cùng đầu ra tôi phải đúc nó.4 silver badges11 bronze badges
Đã trả lời ngày 17 tháng 5 năm 2011 lúc 21:42
raw_input["Press Enter to continue..."]
4John Gaines Jr.John Gaines Jr.Nov 7, 2018 at 18:01
10,8K1 Huy hiệu vàng25 Huy hiệu bạc25 Huy hiệu đồngandrew pate
Tôi chưa quen với Python và tôi đã nghĩ rằng tôi quá ngu ngốc để tái tạo những gợi ý đơn giản nhất được đưa ra ở đây. Hóa ra, có một cạm bẫy mà người ta nên biết:33 silver badges26 bronze badges
1
Khi một kịch bản python được thực hiện từ IDLE, một số lệnh IO dường như hoạt động hoàn toàn khác nhau [vì thực sự không có cửa sổ đầu cuối].
//github.com/boppreh/keyboard#api
raw_input["Press Enter to continue..."]
5Ví dụ. msvcrt.getch không chặn và luôn trả về $ ff. Điều này đã được báo cáo từ lâu [xem ví dụ: //bugs.python.org/issue9290] - và nó được đánh dấu là đã khắc phục, bằng cách nào đó, vấn đề dường như vẫn tồn tại trong các phiên bản hiện tại của Python/Idle.Sep 22, 2021 at 19:21
w4dd325w4dd325w4dd325
Vì vậy, nếu bất kỳ mã nào được đăng ở trên không hoạt động cho bạn, hãy thử chạy tập lệnh theo cách thủ công và không nhàn rỗi.3 silver badges20 bronze badges
1
Đã trả lời ngày 28 tháng 7 năm 2016 lúc 21:47
raw_input["Press Enter to continue..."]
6
RalfiiiralfiiiDec 18, 2013 at 6:39
5304 Huy hiệu bạc11 Huy hiệu đồngJames King
Nếu bạn muốn đợi Enter [vì vậy người dùng gõ bàn phím không gây ra điều gì không có ý định xảy ra]3 gold badges24 silver badges40 bronze badges
1
Nếu bạn muốn xem họ có nhấn một phím chính xác không [như nói 'B'] làm điều này:
raw_input["Press Enter to continue..."]
7
Achal Dave
3,8392 Huy hiệu vàng23 Huy hiệu bạc32 Huy hiệu Đồng2 gold badges23 silver badges32 bronze badges
Đã trả lời ngày 19 tháng 6 năm 2012 lúc 3:42Jun 19, 2012 at 3:42
1