스레드를 하나 만들어서 거기서 sleep한 후 원격으로 exception을 발생시켜 input에서 빠져나가게 할 수 있지 않을까 짐작했었습니다.
그런데 대충 예상했던 것보다 훨씬 어려운 문제로군요. 그렇게 간단하게는 안 되는 모양입니다.
python input timeout 따위로 검색해 보면 이 문제를 과거에 고민해봤던 사람들의 흔적을 찾을 수 있습니다.
예상했던 대로 리눅스에서 동작하는 코드들은 다양하게 발견되는데 (다 제치고서라도 리눅스에는 SIGALRM이 있죠) 윈도우즈에서 동작한다는 코드는 드물군요.
일단 제가 찾은 링크라도 공유를 해 드리겠습니다. 테스트해보시고 괜찮다 싶은 게 있으면 사용해보세요.
보시면 아시겠지만, 윈도우즈에서 돌아간다고 하는 코드들은 상당히 지저분해 보입니다.
파이썬에서 msvcrt.kbhit 같은 코드를 호출해야 하는 상황쯤 되면 볼 장 다 본 거죠.
콘솔 입출력이 간편하기는 하지만, 이렇게 실시간 인터랙티브로 동작하는 기능을 구현할 때는 제약이 생기는 경우가 있어요. 그런 경우엔 어쩔 수 없이 지저분한 해결책을 이용하거나, 아니면 그냥 콘솔을 버리고 다른 인터페이스로 구현하거나, 아예 그 기능을 포기하거나 등의 선택지가 있지요. 어떻게 하실지는 질문자님 선택입니다.
스레드를 하나 만들어서 거기서 sleep한 후
스레드를 하나 만들어서 거기서 sleep한 후 원격으로 exception을 발생시켜 input에서 빠져나가게 할 수 있지 않을까 짐작했었습니다.
그런데 대충 예상했던 것보다 훨씬 어려운 문제로군요. 그렇게 간단하게는 안 되는 모양입니다.
python input timeout 따위로 검색해 보면 이 문제를 과거에 고민해봤던 사람들의 흔적을 찾을 수 있습니다.
예상했던 대로 리눅스에서 동작하는 코드들은 다양하게 발견되는데 (다 제치고서라도 리눅스에는 SIGALRM이 있죠) 윈도우즈에서 동작한다는 코드는 드물군요.
일단 제가 찾은 링크라도 공유를 해 드리겠습니다. 테스트해보시고 괜찮다 싶은 게 있으면 사용해보세요.
https://stackoverflow.com/questions/1335507/keyboard-input-with-timeout-in-python
https://stackoverflow.com/questions/2933399/how-to-set-time-limit-on-raw-input
https://stackoverflow.com/questions/492519/timeout-on-a-function-call
https://stackoverflow.com/questions/15528939/python-3-timed-input
보시면 아시겠지만, 윈도우즈에서 돌아간다고 하는 코드들은 상당히 지저분해 보입니다.
파이썬에서 msvcrt.kbhit 같은 코드를 호출해야 하는 상황쯤 되면 볼 장 다 본 거죠.
콘솔 입출력이 간편하기는 하지만, 이렇게 실시간 인터랙티브로 동작하는 기능을 구현할 때는 제약이 생기는 경우가 있어요. 그런 경우엔 어쩔 수 없이 지저분한 해결책을 이용하거나, 아니면 그냥 콘솔을 버리고 다른 인터페이스로 구현하거나, 아예 그 기능을 포기하거나 등의 선택지가 있지요. 어떻게 하실지는 질문자님 선택입니다.
많은 도움이 됐습니다!!!
콘솔 상에서 input을 하려고 했는데 올려주신 사이트에서 tkinter를 사용하여 새로 창을 만들어 하는 것을 보고 해결하였습니다. 콘솔 상에서 input의 timeout을 설정해주는게 정말 어렵네요 ㅠㅠ
알려주셔서 감사합니다 !!
댓글 달기