[일상] 파이썬: 입력이 없는 경우에 자동으로 다음으로 넘어가기

command line 형태로 프로그램을 개발하다보면 사용자가 입력을 하여야 다음으로 넘어가게 됩니다. 대부분의 경우에는 이렇게 개발하면 됩니다. 그런데 경우에 따라 일정기간 사용자 입력이 없으면 다음으로 넘어가야하는 경우도 있습니다. 예를들어 자동으로 trading하는 프로그램의 경우에 사용자 입력이 없으면 trading할 대상이 있는지 확인하는 부분으로 넘어가는 기능이 필요합니다.

파이썬에서 제공하는 기본 입력함수는 input() 입니다. 아래와 같이 사용하는데, 사용자가 입력하고 enter를 칠때 까지 멈춰있습니다.

cmd = input()

제가 필요한 것은 일정 시간동안 입력이 없으면 자동으로 default 입력 값으로 이 줄을 실행하는 것입니다. 열심히 구굴링을 해보니, 역시나 좋은 예제 코드가 있더군요.

방법은 msvcrt.kbhit() 라고 하는 keyboard 입력 여부를 확인할 수 있는 함수를 이용하는 것입니다. 동작방식은 간단합니다. 무한정 loop를 돌면서 keyboard 입력이 있었다면 한 글자 읽어옵니다. 이걸 반복하다가 enter키가 들어오면 모아서 돌려줍니다. 만약 keyboard 입력이 없었다면 기다리는 시간이 지났는지 확인하여 만약 대기 시간이 지났으면 default 값을 돌려줍니다.

이러한 일을 수행하는 코드는 아래와 같습니다. cmd 방식으로 동작하는 프로그램에 아주 유용한 함수로 보입니다.

import sys, time, msvcrt

def readInput( caption, default, timeout = 5):

    start_time = time.time()
    input = ''
    while True:
        if msvcrt.kbhit():
            byte_arr = msvcrt.getche()
            if ord(byte_arr) == 13: # enter_key
                break
            elif ord(byte_arr) >= 32: #space_char
                input += "".join(map(chr,byte_arr))
        if len(input) == 0 and (time.time() - start_time) > timeout:
#           print("timing out, using default value.")
            break

#    print('')  # needed to move to next line
    if len(input) > 0:
        return input
    else:
        return default

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 64302.59
ETH 2654.83
USDT 1.00
SBD 2.83