programing tip

콘솔에서 같은 위치에 출력을 쓰려면 어떻게합니까?

itbloger 2020. 6. 17. 19:01
반응형

콘솔에서 같은 위치에 출력을 쓰려면 어떻게합니까?


나는 파이썬을 처음 사용하고 FTP 서버에서 파일을 자동으로 다운로드하는 스크립트를 작성하고 있습니다. 다운로드 진행 상황을 보여주고 싶지만 다음과 같은 동일한 위치에 머물기를 원합니다.

산출:

FooFile.txt 파일 다운로드 [47 %]

나는 이런 것을 피하려고 노력하고있다 :

     Downloading File FooFile.txt [47%]
     Downloading File FooFile.txt [48%]
     Downloading File FooFile.txt [49%]

어떻게해야합니까?


복제 : 명령 행 응용 프로그램에서 현재 행을 어떻게 인쇄합니까?


캐리지 리턴을 사용할 수도 있습니다.

sys.stdout.write("Download progress: %d%%   \r" % (progress) )
sys.stdout.flush()

curses 모듈 과 같은 터미널 처리 라이브러리를 사용하십시오 .

curses 모듈은 휴대용 고급 터미널 처리를위한 사실상의 표준 인 curses 라이브러리에 대한 인터페이스를 제공합니다.


파이썬 2

나는 다음을 좋아한다 :

print 'Downloading File FooFile.txt [%d%%]\r'%i,

데모:

import time

for i in range(100):
    time.sleep(0.1)
    print 'Downloading File FooFile.txt [%d%%]\r'%i,

파이썬 3

print('Downloading File FooFile.txt [%d%%]\r'%i, end="")

데모:

import time

for i in range(100):
    time.sleep(0.1)
    print('Downloading File FooFile.txt [%d%%]\r'%i, end="")

백 스페이스 문자를 \b여러 번 인쇄 한 다음 이전 숫자를 새 숫자로 덮어 씁니다.


#kinda like the one above but better :P

from __future__ import print_function
from time import sleep

for i in range(101):
  str1="Downloading File FooFile.txt [{}%]".format(i)
  back="\b"*len(str1)
  print(str1, end="")
  sleep(0.1)
  print(back, end="")

Python 3xx의 경우 :

import time
for i in range(10):
    time.sleep(0.2) 
    print ("\r Loading... {}".format(i)+str(i), end="")

나를 위해 일한 깔끔한 솔루션은 다음과 같습니다.

from __future__ import print_function
import sys
for i in range(10**6):
    perc = float(i) / 10**6 * 100
    print(">>> Download is {}% complete      ".format(perc), end='\r')
    sys.stdout.flush()
print("")

sys.stdout.flush달리 정말 투박 가져오고 중요하다 print("")루프 종료에 대한에도 중요하다.

UPDATE : 코멘트에서 언급 한 바와 같이, print또한이 flush인수를. 따라서 다음도 작동합니다.

from __future__ import print_function
for i in range(10**6):
    perc = float(i) / 10**6 * 100
    print(">>> Download is {}% complete      ".format(perc), end='\r', flush=True)
print("")

x="A Sting {}"
   for i in range(0,1000000):
y=list(x.format(i))
print(x.format(i),end="")

for j in range(0,len(y)):
    print("\b",end="")

참고 URL : https://stackoverflow.com/questions/517127/how-do-i-write-output-in-same-place-on-the-console

반응형