본문 바로가기
프로그래밍/Python

[Python] 버퍼를 이용해 input에 자동으로 입력하기

by onsil-thegreenhouse 2023. 5. 7.
반응형

이번 기능은 다음과 같은 상황을 해결하다가 알게 되었습니다. 어떤 API를 이용해서 DB에 접속해 주기적으로 데이터를 읽어야 했습니다. 그런데 API는 일정 시간마다 접속이 끊겼고, 그때마다 다시 연결해야 했습니다. 그런데 API에는 받는 파라미터가 없었고, id, pw를 매개변수로 넘겨서 연결하는 게 불가능했습니다. API 내부는 모르지만 대충 사용방식이 아래와 같습니다. 이 때문에 DB에 주기적으로 접속하는 프로그램이 완전한 자동화가 못되고, 주기적으로 사용자가 직접 프로그램을 확인해서, API 연결이 끊어져 있으면 id와 pw를 직접 타이핑했어야 했는데요, 이를 해결한(자동화한) 방식을 살펴보겠습니다.

ID와 PW를 직접 입력해야 하는 API 예제
ID와 PW를 직접 입력해야하는 API 예제
ID와 PW를 직접 입력해야하는 API 예제 화면
ID와 PW를 직접 입력해야하는 API 예제 화면

 

 

 

 


 

1. 해결 코드

import sys
import io

f = io.StringIO('ID String\nPW String')
sys.stdin = f

id = input('input ID: ')
pw = input('input PW: ')

print()
print()
print(f'id: {id}\npw: {pw}')

해결 코드의 결과 화면
해결 코드의 결과 화면

 

 

2. 설명

2.1. io.StringIO

python docs - io.StringIO

- 먼저 io.StringIO를 이용해 입력할 id와 pw를 버퍼에 파일객체로 저장합니다.

- id와 pw를 개행문자(\n)로 구분하는 이유는 input()에서 설명합니다.

 

 

2.2. sys.stdin

python docs - sys.stdin

- input() 입력에 사용되는 sys.stdin를 위에서 만든 (버퍼 안에 저장된) 파일객체로 정의합니다.

 

 

2.3. input()

python docs - input

- input() 함수는 원래 사용자의 입력을 기다리지만, 버퍼에 값이 있을 땐 해당 값을 줄 단위로 바로 읽습니다.

(위 설명에 '한 줄을 읽고' 라고 써져 있습니다.)

- 즉, 우리가 파일 객체에 쓴 'ID String\nPW String'에서 'ID String\n' 까지를 한 줄로 인식하여 읽고, 끝의 줄 바꿈 문자(\n)를 제거한 후, 첫 번째 id를 받는 input 입력에 사용합니다.

(위 설명에 '줄 끝의 줄 바꿈 문자를 제거한다'라고 써져 있습니다.)

- 다음으로 파일 객체에 남은 'PW String'을 두 번째 pw를 받는 input에 사용합니다.

- 이런 방식으로 파일 객체를 버퍼에 저장해두면, 직접 타이핑해야 하는 작업도 자동화할 수 있습니다.

반응형

댓글