python에서 input에 timeout을 걸고 싶습니다.

maboloo의 이미지

파이썬으로 소켓 프로그래밍을 짜고 있는 학생입니다.

제가 하고 싶은 건 input에 타임을 걸어 (예를 들어 5초) 5초 안에 입력을 한다면

input의 내용에 따라 프로그램을 진행하고

입력을 하지 못하면

print("시간안에 입력을 하지 못했습니다")

라고 뜨면서 프로그램이 종료되었으면 좋겠습니다.

문자 하나 하나가 아닌 문자열을 입력 받으려고 하는데 어떤 함수를 써야 위의 문제를 해결할 수 있을까요?

 의 이미지

스레드를 하나 만들어서 거기서 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 같은 코드를 호출해야 하는 상황쯤 되면 볼 장 다 본 거죠.

콘솔 입출력이 간편하기는 하지만, 이렇게 실시간 인터랙티브로 동작하는 기능을 구현할 때는 제약이 생기는 경우가 있어요. 그런 경우엔 어쩔 수 없이 지저분한 해결책을 이용하거나, 아니면 그냥 콘솔을 버리고 다른 인터페이스로 구현하거나, 아예 그 기능을 포기하거나 등의 선택지가 있지요. 어떻게 하실지는 질문자님 선택입니다.

maboloo의 이미지

콘솔 상에서 input을 하려고 했는데 올려주신 사이트에서 tkinter를 사용하여 새로 창을 만들어 하는 것을 보고 해결하였습니다. 콘솔 상에서 input의 timeout을 설정해주는게 정말 어렵네요 ㅠㅠ
알려주셔서 감사합니다 !!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.