본문 바로가기
CS/Python

[파이썬 배우기] python 출력 새로고침, 갱신하면서 출력 하는 방법

by Warehaus 2022. 8. 1.

 

안녕하세요 warehouse입니다.

 

 

오늘은 파이썬을 구현하면서 출력할 때,

화면을 새로고침 하면서 출력을 업데이트 하는 방법을 알아보려고 합니다.

 

 

사실 이 부분은 엄청날 스킬은 아니고

개발하면서 한번 쯤 검색해 볼만 한 팁 인것 같아요.

 

저도 파이썬을 이용한 사용자 인터페이스 구현을 하다가

출력이 갱신되었으면 하는 마음에 찾아보고 정리해 둔 내용이니

저와 같은 처지(?) 에 놓이신 분들도 참고 하셨으면 좋겠습니다.

 

 

언제 필요한가?

 

제가 필요한 경우는 아래와 같은 상황이었어요.

 

1. 사용자에게 지금까지 대기 한 시간을 표현해야 한다.
2. 줄줄이 소세지로 터미널 스크롤이 생기지 않았으면 좋겠다.

 

일단 1. 을 먼저 구현해 보면 아래 예시처럼 만들어질거에요.

 

10초를 대기했다고 생각하면.. 10번 수준의 루프가 돌아야겠죠?

 

$ python3 stdout_refresh.py 
0
1
2
3
4
5
6
7
8
9

 

이렇게 대기시간이 계속해서 늘어나다 보면..

창이 계속 올라가면서 터미널이 지저분 해 지게 됩니다.

 

이제 2. 에 대한 요구사항을 처리해 봅니다.

 

혹시 리눅스에서  "clear" 라는 명령어를 사용해 보셨을까요?

리눅스 터미널 clear 명령어는 사용하면 현재 터미널의 화면을 정리해 줍니다.

 

 

clear

 

한번 타이밍 하면 터미널이 싹 정리되는 것을 볼 수 있습니다.

저는 요구사항 2. 에 대해 clear 를 활용할 예정입니다.

 

clear 타이핑 효과를 위해 서는 python 표준 라이브러리 os 의 system 함수를 사용해 봅니다.

 

import os
for i in range(0,10):
    os.system("clear")
    print (str(i) + " seconds elapsed.")

 

반응형

 

system 함수 설명은 다음과 같습니다.

 

Execute the command (a string) in a subshell. 

 

명령어를 쉘에서 실행하는 효과를 내는데, 우리는 "clear" 를 쉘에서 타이핑 하는 코드를 작성하였습니다.

 

위 코드를 해석하면 print 이전에 화면을 한 번 정리하고, 그 다음 print 출력 한다는 의미를 가지고 있습니다.

 

결과는 다음과 같습니다.

 

9 seconds elapsed.

 

0~9 까지 출력을 하는 print 함수 중 마지막 내용만 출력이 되었습니다.

 

위 코드는 sleep 이 들어있지 않아서 그저 9 seconds elapsed 만 출력 된 것으로 보이지만,

실제로는 그렇지는 않습니다. 

 

0~ 8 초 에 대한 내용이 출력되었지만,

그 내용들은 clear 명령에 의해 터미널에서 정리가 된 것이죠.

 

이렇게 한 터미널에서 한줄로 간략하게 표시해 주는 것이 지저분하지 않게 실시간 메시지를 출력해 주는 데 상당히 도움이 되곤 합니다.

 

실제로 터미널에서 watch 라는 명령어도 이 목적으로 사용이 되고 있어요.

watch 에 대한 내용은 참고가 될만한 링크가 있어서 공유드리고 오늘의 포스팅을 마치겠습니다.

 

https://phoenixnap.com/kb/linux-watch-command

 

Linux Watch Command - Examples And How to Use It

Linux watch command lets you repeatedly run a command or utility in regular time intervals. Learn how it works and what it can do.

phoenixnap.com

 

 

 

감사합니다.