"Hello World"를 인쇄하기 위해 타이머를 사용하여 올바른 지시를받은 것처럼 보입니다. Irmen de Jong이 "스레드와 콘솔 입출력이 잘 작동하지 않는다"는 문항에 대한 질문에 대해 upvote를하고 싶습니다. C 프로그래밍에서이 경험을 직접 경험했기 때문입니다.
일단 타이머를 사용하면 화면에 인쇄되는 텍스트가 키보드 입력에 응답하지 않아야합니다. 실제로 키보드의 입력을 input()
으로 읽을 때 'c'의 키 누르기 ('Enter'가 뒤 따르지 않음)에 직접 응답해야하는 경우, Python method for reading keypress?의 해결 방법 중 하나를 따르는 것이 좋습니다 어떻게 구현하고 싶은지 알아보십시오.
편집 : 스레드 기반 타이머를 사용하여 솔루션을 구현하는 것은 생각보다 조금 까다 롭습니다. 이 문제에 대한 당신의 연구에 발견 할 수 있습니다으로
는 threading.Timer
객체는 변수에 타이머에 대한 참조를 저장 한 경우 개별 스레드 타이머의 실행을 제어하는 데 사용할 수있는 두 start()
및 stop()
방법이있다 (예 : my_timer = threading.Timer(10.0, looping)
을 수행 한 후 my_timer.start()
을 호출하여 타이머를 시작하십시오). 이렇게하면 my_timer.stop()
에 전화하여 해당 시점에 중지해야하는 현재 타이머 인스턴스에 대한 적절한 참조를 유지해야 루프를 일시 중지 할 수 있습니다.
내가, False
로 설정하면, looping
가 호출 될 때 이에 PAUSE_LOOPING
때까지 함수의 모든 추가 반복을 중지, 시작되는 새로운 타이머 인스턴스를 중지하는 글로벌 변수 PAUSE_LOOPING
을 만들하기로 결정했습니다, 좀 더 쉽게 일을 만들려면 True
다시 설정되고 looping()
는 다시 호출 : 마지막 코드 블록에서 주석
import threading
from msvcrt import getch
PAUSE_LOOPING = False
def looping():
global PAUSE_LOOPING
if not PAUSE_LOOPING:
threading.Timer(10.0, looping).start()
print("Hello World!")
looping()
while True:
# key = ord(getch())
# if key == 13: # Enter
# PAUSE_LOOPING = True
input_string = input()
if input_string == "":
PAUSE_LOOPING = True
else:
PAUSE_LOOPING = False
looping()
이 (input()
에서 요구하는대로 키를 '입력'누를 필요없이) 직접 키 누름을 잡기 위해 한 방법입니다 내 대답에 이전에 링크 된 stackoverflow 질문에서 가져온. 이 기능은 Windows 용 Python (MS VC++ 런타임 라이브러리 msvcrt
이 설치되어 있으므로)을 사용하는 동안 작동하지만 'Enter'키를 누르면 스크립트가 중지되도록 표준 input()
기능을 사용할 수 있습니다. 필자의 예에서는 'Enter'키를 누르기 전에 다른 문자열을 입력하면 일시 중지 된 후 루핑이 재개됩니다.
참고 :이 코드를 실행하려면 Python의 IDLE을 사용하십시오. 그것은 작동하지 않습니다. 대신 명령 줄에서 실행해야합니다.
이상한 할당 ..... 어쨌든 10 초마다 "Hello world"부분없이 프로그램을 만들어보십시오. 그냥 보통의 input-if-else 구조체를 생성하면된다. 그게 작동하면, 타이머 일을 추가하십시오. 스레드와 콘솔 입출력이 잘 작동하지 않는다는 것을 알아 두십시오. –