이번 기능은 다음과 같은 상황을 해결하다가 알게 되었습니다. 어떤 API를 이용해서 DB에 접속해 주기적으로 데이터를 읽어야 했습니다. 그런데 API는 일정 시간마다 접속이 끊겼고, 그때마다 다시 연결해야 했습니다. 그런데 API에는 받는 파라미터가 없었고, id, pw를 매개변수로 넘겨서 연결하는 게 불가능했습니다. API 내부는 모르지만 대충 사용방식이 아래와 같습니다. 이 때문에 DB에 주기적으로 접속하는 프로그램이 완전한 자동화가 못되고, 주기적으로 사용자가 직접 프로그램을 확인해서, API 연결이 끊어져 있으면 id와 pw를 직접 타이핑했어야 했는데요, 이를 해결한(자동화한) 방식을 살펴보겠습니다.
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
- 먼저 io.StringIO를 이용해 입력할 id와 pw를 버퍼에 파일객체로 저장합니다.
- id와 pw를 개행문자(\n)로 구분하는 이유는 input()에서 설명합니다.
2.2. sys.stdin
- input() 입력에 사용되는 sys.stdin를 위에서 만든 (버퍼 안에 저장된) 파일객체로 정의합니다.
2.3. input()
- input() 함수는 원래 사용자의 입력을 기다리지만, 버퍼에 값이 있을 땐 해당 값을 줄 단위로 바로 읽습니다.
(위 설명에 '한 줄을 읽고' 라고 써져 있습니다.)
- 즉, 우리가 파일 객체에 쓴 'ID String\nPW String'에서 'ID String\n' 까지를 한 줄로 인식하여 읽고, 끝의 줄 바꿈 문자(\n)를 제거한 후, 첫 번째 id를 받는 input 입력에 사용합니다.
(위 설명에 '줄 끝의 줄 바꿈 문자를 제거한다'라고 써져 있습니다.)
- 다음으로 파일 객체에 남은 'PW String'을 두 번째 pw를 받는 input에 사용합니다.
- 이런 방식으로 파일 객체를 버퍼에 저장해두면, 직접 타이핑해야 하는 작업도 자동화할 수 있습니다.
'프로그래밍 > Python' 카테고리의 다른 글
[30 Days of Streamlit] Day2. 첫 Streamlit App 실행 (0) | 2023.06.06 |
---|---|
[30 Days of Streamlit] Day1. 환경 설정 (0) | 2023.06.06 |
[Python] 자주 사용하는 String Format 정리[feat. locals()] (0) | 2023.05.19 |
[Python] 컬럼 type이 list인 DataFrame에서 subset 구하기 (0) | 2023.05.17 |
[PyCharm] Exception에 밑줄 처리하기 (0) | 2023.05.03 |
댓글