Hướng dẫn python wait for key press - python chờ nhấn phím

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?

Hướng dẫn python wait for key press - python chờ nhấn phím

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

Hướng dẫn python wait for key press - python chờ nhấn phím

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.

Hướng dẫn python wait for key press - python chờ nhấn phím

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:riza

Trong Python 2, sử dụng

raw_input("Press Enter to continue...")
9:7 gold badges28 silver badges29 bronze badges

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...")

Hướng dẫn python wait for key press - python chờ nhấn phím

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 Hewgill

Trong Python 2, sử dụng

raw_input("Press Enter to continue...")
9:178 gold badges1134 silver badges1268 bronze badges

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,

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.35 silver badges33 bronze badges

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...")
0

Cú 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

Hướng dẫn python wait for key press - python chờ nhấn phím

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...")
2

Tô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...")
4

John Gaines Jr.John Gaines Jr.Nov 7, 2018 at 18:01

Hướng dẫn python wait for key press - python chờ nhấn phím

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).

https://github.com/boppreh/keyboard#api

raw_input("Press Enter to continue...")
5

Ví 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ụ: https://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

Hướng dẫn python wait for key press - python chờ nhấn phím

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