python에서 multi line으로 진행상황 나타내기
2019. 11. 24. 21:18ㆍProgramming/python
2016/11/19 - [Programming/python] - python에서 Progressbar 표현하기
위의 코드를 활용해서 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이 각각 존재하고 값만 계속 갱신되는 형태의 결과를 확인해 볼 수가 있다.