python에서 multi line으로 진행상황 나타내기

2019. 11. 24. 21:18Programming/python

2016/11/19 - [Programming/python] - python에서 Progressbar 표현하기

 

python에서 Progressbar 표현하기

Python script를 실행하는데 이게 돌고 있는건지.. 아니면 멈춘건지 의구심이 들때가 간혹 있다. 언제 끝나는지 궁금하기도 하고... 그래서 python으로 progressbar를 표현할 수 있는게 없나 구글에서 찾아봄. htt..

yujuwon.tistory.com

 

위의 코드를 활용해서 multi line으로 화면에 진행상황을 출력하려고 했으나, 번번히 실패를 경험하게 된다.

가령 stdout에 '/r', '/n'등을 입력하고 flush를 하게 되면 출력하려고 하는 문장이 1줄로만 나타나거나, newline이 동작하여 아래로 쭉 써지게 된다.

 

예를 들어 아래와 같이 코드를 작성했다고 치면,

import sys
import time
for i in range(10):
	sys.stdout.write('\rtest {}\r\ntest2 {}'.format(i, i+3))
	time.sleep(1);
	sys.stdout.flush()

결과 값은 아래와 같이 나타나게 된다.

 

내가 원하는 건 test, test2가 각각 한 줄씩 나타나면서 값만 변화되는 걸 원하는 거였으나, stdout을 이용해서는 어떻게 output을 출력해야 할지 감을 찾지 못했다.

 

결국 package를 찾아보게 되었고, 아래의 package를 통해 정말 쉽게 해당 기능을 구현할 수 있었다.

 

$> pip install reprint

 

from reprint import output
import time
import random

with output(initial_len=3, interval=0) as output_lines:
	while True:
		output_lines[0] = "First_line  {}...".format(random.randint(1,10))
		output_lines[1] = "Second_line {}...".format(random.randint(1,10))
		output_lines[2] = "Third_line  {}...".format(random.randint(1,10))
		time.sleep(0.5)

위의 코드를 돌리면 First_line, Second_list, Third_line이 각각 존재하고 값만 계속 갱신되는 형태의 결과를 확인해 볼 수가 있다.