programing

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

css3 2023. 6. 4. 22:28

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

저는 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
---------------------

파이썬에서 문자열을 포맷하는 방법은 여러 가지가 있으며, 기본적으로 포맷된 문자열 유형도 있습니다.

문자열 형식 지정 방법

  1. 함수( 가지 예)
  2. 형식화된 문자열 리터럴 또는 공통 이름 f-string.
  3. %를 사용하여 형식 지정(자세한 내용)

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