[python] 파이썬에서 새 줄이 아닌 동일한 줄로 인쇄하십시오.

기본적으로 나는이 남자가 한 것과는 반대로하고 싶다 … 헤헤.

Python 스크립트 : 기존 줄을 업데이트하는 대신 셸에 매번 새 줄을 인쇄합니다.

얼마나 멀리 있는지 알려주는 프로그램이 있습니다.

for i in some_list:
    #do a bunch of stuff.
    print i/len(some_list)*100," percent complete"

따라서 len (some_list)가 50이면 마지막 줄이 50 번 인쇄됩니다. 한 줄을 인쇄하고 그 줄을 계속 업데이트하고 싶습니다. 나는 이것이 아마도 당신이 하루 종일 읽을 가장 얄팍한 질문이라는 것을 알고 있습니다. 답을 얻기 위해 Google에 입력해야하는 네 단어를 알아낼 수 없습니다.

최신 정보! 나는 올바른 SEEMED mvds의 제안을 시도했습니다. 새로운 코드

print percent_complete,"           \r",

완료율은 문자열 일뿐입니다 (이제 처음으로 추상화하고 문자 그대로 되려고합니다). 그 결과 이제 프로그램을 실행하고 프로그램이 끝날 때까지 아무것도 인쇄하지 않고 한 줄에만 “100 % 완료”를 인쇄합니다.

캐리지 리턴이 없으면 (하지만 쉼표와 함께 mvds 제안의 절반) 끝까지 아무것도 인쇄하지 않습니다. 그리고 다음을 인쇄합니다.

0 percent complete     2 percent complete     3 percent complete     4 percent complete

등등. 이제 새로운 문제는 쉼표를 사용하면 프로그램이 끝날 때까지 인쇄되지 않는다는 것입니다.

캐리지 리턴이 있고 쉼표가 없으면 둘 다와 똑같이 작동합니다.



답변

캐리지 리턴이라고합니다. \r

사용하다

print i/len(some_list)*100," percent complete         \r",

쉼표는 인쇄가 개행을 추가하는 것을 방지합니다. (그리고 공백은 이전 출력에서 ​​줄을 명확하게 유지합니다)

또한, print ""적어도 마무리 개행을 얻으려면 a 로 종료하는 것을 잊지 마십시오 !


답변

저에게 효과가 있었던 것은 Remi와 siriusd의 답변의 조합이었습니다.

from __future__ import print_function
import sys

print(str, end='\r')
sys.stdout.flush()


답변

Python 3.x에서 다음을 수행 할 수 있습니다.

print('bla bla', end='')

( from __future__ import print_function스크립트 / 모듈 상단 에 배치 하여 Python 2.6 또는 2.7에서도 사용할 수 있음 )

Python 콘솔 진행률 표시 줄 예 :

import time

# status generator
def range_with_status(total):
    """ iterate from 0 to total and show progress in console """
    n=0
    while n<total:
        done = '#'*(n+1)
        todo = '-'*(total-n-1)
        s = '<{0}>'.format(done+todo)
        if not todo:
            s+='\n'
        if n>0:
            s = '\r'+s
        print(s, end='')
        yield n
        n+=1

# example for use of status generator
for i in range_with_status(10):
    time.sleep(0.1)


답변

Python 3.3 이상에서는 sys.stdout.flush(). print(string, end='', flush=True)공장.

그래서

print('foo', end='')
print('\rbar', end='', flush=True)

‘foo’를 ‘bar’로 덮어 씁니다.


답변

콘솔의 경우 아마도 필요할 것입니다.

sys.stdout.flush()

강제로 업데이트합니다. ,인쇄에서 사용 하면 stdout이 플러시되는 것을 차단하고 어떻게 든 업데이트하지 않을 것이라고 생각합니다.


답변

게임 후반에-그러나 대답 중 어느 것도 나를 위해 일하지 않았고 (모두 시도하지 않았습니다) 내 검색 에서이 대답을 두 번 이상 발견했기 때문에 … 파이썬 3 에서이 솔루션은 매우 우아합니다 저자가 찾고있는 일을 정확히 수행한다고 생각합니다. 동일한 줄에 단일 문장을 업데이트합니다. 줄이 늘어나는 대신 축소되는 경우 특수한 작업을 수행해야 할 수 있습니다 (예 : 끝에 패딩 된 공백이있는 고정 길이로 문자열 만들기)

if __name__ == '__main__':
    for i in range(100):
        print("", end=f"\rPercentComplete: {i} %")
        time.sleep(0.2)


답변

이것은 나를 위해 작동하며 가능한지 확인하기 위해 한 번 해킹했지만 실제로 내 프로그램에서 사용되지 않았습니다 (GUI가 훨씬 더 좋습니다).

import time
f = '%4i %%'
len_to_clear = len(f)+1
clear = '\x08'* len_to_clear
print 'Progress in percent:'+' '*(len_to_clear),
for i in range(123):
    print clear+f % (i*100//123),
    time.sleep(0.4)
raw_input('\nDone')