> 백엔드 개발 > 파이썬 튜토리얼 > 스크립트에서 터미널의 키보드 입력을 감지하는 방법은 무엇입니까?

스크립트에서 터미널의 키보드 입력을 감지하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-29 22:00:29
원래의
469명이 탐색했습니다.

How to Detect Keyboard Input from the Terminal in a Script?

터미널에서 스크립트의 키보드 입력을 감지하는 방법

필요와 작동에 따라 터미널에서 스크립트의 키보드 입력을 감지하는 방법에는 여러 가지가 있습니다. system.

동기식/차단 키 캡처

이 접근 방식은 키를 누를 때까지 스크립트를 차단한 다음 누른 키를 반환합니다.

  • 간단한 경우 input 또는 raw_input은 사용자가 줄 바꿈을 누르면 사용자가 입력한 텍스트를 반환하는 차단 함수입니다.
  • 사용자가 단일 키를 누를 때까지 기다렸다가 해당 키를 반환하는 간단한 차단 함수의 경우 다음을 사용하세요. code.
<code class="python">class _Getch:
    """Gets a single character from standard input.  Does not echo to the
screen. From http://code.activestate.com/recipes/134892/"""
    def __init__(self):
        try:
            self.impl = _GetchWindows()
        except ImportError:
            try:
                self.impl = _GetchMacCarbon()
            except(AttributeError, ImportError):
                self.impl = _GetchUnix()

    def __call__(self): return self.impl()


class _GetchUnix:
    def __init__(self):
        import tty, sys, termios # import termios now or else you'll get the Unix version on the Mac

    def __call__(self):
        import sys, tty, termios
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

class _GetchWindows:
    def __init__(self):
        import msvcrt

    def __call__(self):
        import msvcrt
        return msvcrt.getch()

class _GetchMacCarbon:
        """
        A function which returns the current ASCII key that is down;
        if no ASCII key is down, the null string is returned.  The
        page http://www.mactech.com/macintosh-c/chap02-1.html was
        very helpful in figuring out how to do this.
        """
        def __init__(self):
            import Carbon
            Carbon.Evt #see if it has this (in Unix, it doesn't)

        def __call__(self):
            import Carbon
            if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the keyDownMask
                return ''
            else:
                #
                # The event contains the following info:
                # (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]
                #
                # The message (msg) contains the ASCII char which is
                # extracted with the 0x000000FF charCodeMask; this
                # number is converted to an ASCII character with chr() and
                # returned
                #
                (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]
                return chr(msg &amp; 0x000000FF)


def getKey():
    inkey = _Getch()
    import sys
    for i in xrange(sys.maxint):
        k=inkey()
        if k<>'':break

    return k</code>
로그인 후 복사

비동기 키 캡처

  • 사용자가 명령 프롬프트에 키를 입력할 때마다 누른 키로 호출되는 콜백입니다. 인터프리터에 내용을 입력할 때(키로거)
  • 사용자가 Enter 키를 누른 후 입력된 텍스트와 함께 호출되는 콜백(덜 실시간 키로거)

폴링

  • 사용자는 해당 키를 기다릴 필요 없이 키를 누를 때 무언가를 수행할 수 있기를 원합니다(따라서 이는 비차단이어야 합니다). 따라서 그들은 poll() 함수를 호출하고 키를 반환하거나 None을 반환합니다. 이것은 손실이 있을 수도 있고(폴링 사이에 너무 오랜 시간이 걸리면 키를 놓칠 수 있음) 비손실일 수도 있습니다(폴러는 누른 모든 키의 기록을 저장하므로 poll() 함수가 키를 요청할 때 항상 반환됩니다) 누른 순서대로).
  • 위와 동일합니다. 단, 설문 조사는 사용자가 줄 바꿈을 누른 후에만 무언가를 반환합니다.

로봇

  • 이것은 키보드 이벤트를 프로그래밍 방식으로 실행하기 위해 호출할 수 있는 것입니다. 이는 키 캡처와 함께 사용하여 사용자에게 다시 에코할 수 있습니다

위 내용은 스크립트에서 터미널의 키보드 입력을 감지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿