콘솔의 같은 위치에 출력을 쓰려면 어떻게 해야 합니까?
저는 python이 처음이고 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()
파이썬 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="")
Python 3이 설치된 PyCharm 디버거 콘솔
# On PyCharm Debugger console, \r needs to come before the text.
# Otherwise, the text may not appear at all, or appear inconsistently.
# tested on PyCharm 2019.3, Python 3.6
import time
print('Start.')
for i in range(100):
time.sleep(0.02)
print('\rDownloading File FooFile.txt [%d%%]'%i, end="")
print('\nDone.')
다음과 같은 터미널 처리 라이브러리를 사용합니다.
저주 모듈은 휴대용 고급 단말기 취급을 위한 사실상의 표준인 저주 라이브러리에 대한 인터페이스를 제공합니다.
백스페이스 문자 인쇄\b
이전 번호를 새 번호로 덮어씁니다.
Python 3xx의 경우:
import time
for i in range(10):
time.sleep(0.2)
print ("\r Loading... {}".format(i)+str(i), end="")
#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="")
저에게 효과적인 해결책은 다음과 같습니다.
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("")
루프 종료를 위해 ON도 중요합니다.
업데이트: 댓글에 언급된 바와 같이,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("")
python 3에서 함수 print는 많은 인수를 얻을 수 있습니다.기능 인쇄의 전체 서명은 다음과 같습니다.print(args*, sep=' ', end='\n', file=sys.stdout, flush=False)
언제sep
변수의 구분 기호입니다.args*
,end
는 인쇄된 줄을 종료하는 방법('\n\'은 새 줄을 의미)이며, 출력을 인쇄하는 위치(stdout은 consurate)이며 버퍼를 청소할 경우 플러시합니다.
사용 예
import sys
a = 'A'
b = 0
c = [1, 2, 3]
print(a, b, c, 4, sep=' * ', end='\n' + ('-' * 21), file=sys.stdout, flush=True)
산출량
A * 0 * [1, 2, 3] * 4
---------------------
파이썬에서 문자열을 포맷하는 방법은 여러 가지가 있으며, 기본적으로 포맷된 문자열 유형도 있습니다.
문자열 형식 지정 방법
예
name = 'my_name'
>>> print('my name is: {}'.format(name))
my name is: my_name
# or
>>> print('my name is: {user_name}'.format(user_name=name))
my name is: my_name
# or
>>> print('my name is: {0}'.format(name))
my name is: my_name
# or using f-strings
>>> print(f'my name is: {name}')
my name is: my_name
# or formatting with %
>>> print('my name is: %s' % name)
my name is: my_name
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
'programing' 카테고리의 다른 글
루비 객체가 부울 객체인지 확인하는 방법 (0) | 2023.06.04 |
---|---|
설치된 보석 목록? (0) | 2023.06.04 |
Firebase - ref와 child의 차이점은 무엇입니까? (0) | 2023.06.04 |
NSDate를 unix timestamp iphone sdk로 변환하는 방법은 무엇입니까? (0) | 2023.06.04 |
작은 첨자를 가진 요소를 포함하여 모든 중복 행 찾기 (0) | 2023.06.04 |