StackOverflow의 두 답변을 결합하여 (거의)이 문제를 해결할 수 있습니다.
- 사용 (tehvan에 의해) this 대답은
\n
필요없이 사용자로부터 하나 개의 문자에 읽는 방법 같은 getch()
을 만들 수 있습니다. (대답에서 아래에 반복)
- this 대답 (Barafu Albino)의 Python3 버전을 사용하여 이전에 정의한
_Getch()
클래스를 별도의 프로세스에서 호출합니다.
다음 코드는 Python3 작동 프로세스뿐 아니라 삽입 키를 중지 어떤 키를 사용하여 있습니다.
# This code is a combination of two StackOverflow answers
# (links given in the answer)
# ------- Answer 1 by tehvan -----------------------------------
class _Getch:
"""Gets a single character from standard input.
Does not echo to the screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
self.impl = _GetchUnix()
def __call__(self): return self.impl()
class _GetchUnix:
def __init__(self):
import tty, sys
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()
getch = _Getch()
# -------- Answer 2 by Barafu Albino (modified) -------
import _thread
def input_thread(a_list):
_Getch().__call__()
a_list.append(True)
def do_stuff():
a_list = []
_thread.start_new_thread(input_thread, (a_list,))
print('Press any key to stop.')
while not a_list:
pass
# This is where you can put the stuff
# you want to do until the key is pressed
print('Stopped.')
do_stuff()
아마도 AutoHotKey를 다시 작성하지 않으면됩니다. 주요 문제는 포커스입니다. AHK는 단축키에 대한 모든 입력을 스캔하는 것처럼 보입니다. 이것은 순수 파이썬 프로그램이 자체 윈도우에 포커스가있을 때만 입력을 받기 때문에 할 수없는 것입니다. macOS 나 linux에서 특별한 (그러나 다른) 시스템 훅에 의존해야한다. 다른 말로하자면, AHK는 시스템이보기 전에 모든 입력 활동을 보내기 위해 간단한 작업을하고 있습니다. – msw
@msw : 나는 아직 '반항성 반입'을 할 수 없다는 것을 인정하지만 (https://xkcd.com/353/),이 일은 내가 이국적인 사람이 아니기 때문에 내가 유일한 사람인 것처럼 보이지 않는다. 그것을 할 수 있기를 바란다. 그래서 도서관이 없다면 이상 할 것이다. – Christian
아마도 파이썬에서 AHK의 스크립팅 언어로 컴파일하는 파서를 작성해야할까요? – poke