[python] 파이썬에서 같은 줄에 여러 번 인쇄

기본적으로 다음과 같은 출력을 보여주는 스크립트를 실행하고 싶습니다.

Installing XXX...               [DONE]

현재 Installing XXX...먼저 인쇄 한 다음 인쇄 [DONE]합니다.

그러나 이제는 같은 줄에 인쇄 Installing xxx...하고 싶습니다 [DONE].

어떤 아이디어?



답변

print명령문을 사용하여 가져 오기없이이를 수행 할 수 있습니다 sys.

def install_xxx():
   print "Installing XXX...      ",

install_xxx()
print "[DONE]"

print줄 끝에있는 쉼표는 줄을 print새로 만들지 못하도록 합니다 (출력 끝에 여분의 공간이있을 것입니다).

Python 3 솔루션
위의 내용은 Python 3에서 작동하지 않기 때문에 대신 (가져 오기없이 sys) 이를 수행 할 수 있습니다 .

def install_xxx():
    print("Installing XXX...      ", end="", flush=True)

install_xxx()
print("[DONE]")

인쇄 기능은 end기본값 인을 사용 "\n"합니다. 빈 문자열로 설정하면 줄 끝에서 새 줄을 발행 할 수 없습니다.


답변

간단히 이것을 사용할 수 있습니다 :

print 'something',
...
print ' else',

출력은

something else

에 의해 과잉 살필 필요가 없습니다 import sys. 끝에 쉼표 기호에주의하십시오.


print("some string", end="");마지막에 줄 바꿈 삽입을 제거하는 Python 3 이상 . 더 읽어보기help(print);


답변

콘솔 출력에서 ​​이전 위치로 돌아가 려면 백 스페이스 ‘ \ r ‘또는 ( ‘ \ x08 ‘) char을 사용해야 합니다.

파이썬 2 이상 :

import time
import sys

def backspace(n):
    sys.stdout.write((b'\x08' * n).decode()) # use \x08 char to go back   

for i in range(101):                        # for 0 to 100
    s = str(i) + '%'                        # string for output
    sys.stdout.write(s)                     # just print
    sys.stdout.flush()                      # needed for flush when using \x08
    backspace(len(s))                       # back n chars    
    time.sleep(0.2)                         # sleep for 200ms

파이썬 3 :

import time

def backline():
    print('\r', end='')                     # use '\r' to go back


for i in range(101):                        # for 0 to 100
    s = str(i) + '%'                        # string for output
    print(s, end='')                        # just print and flush
    backline()                              # back to the beginning of line    
    time.sleep(0.2)                         # sleep for 200ms

이 코드는 한 줄에 0 %에서 100 %까지 계산됩니다. 최종 가치는 다음과 같습니다.

> python test.py
100%

이 경우 flush에 대한 추가 정보는 다음과 같습니다. 왜 ‘end =’인수를 포함하는 python print 문이 while 루프에서 다르게 동작합니까?


답변

sys.stdout.write('Installing XXX... ')및을 사용하십시오 sys.stdout.write('Done'). 이런 식으로 "\n"인쇄 기능을 다시 만들려면 새 줄을 직접 추가해야 합니다. 나는 이것을 위해 저주를 사용할 필요가 없다고 생각합니다.


답변

새로운 라인이 나올 때까지 모두 일시 중지 되었기 때문에 답이 없습니다. 간단한 도우미를 작성했습니다.

def print_no_newline(string):
    import sys
    sys.stdout.write(string)
    sys.stdout.flush()

그것을 테스트하려면 :

import time
print_no_newline('hello ')
# Simulate a long task
time.sleep(2)
print('world')

“hello”는 먼저 잠자기 전에 인쇄하고 화면을 플러시합니다. 그런 다음 표준 인쇄를 사용할 수 있습니다.


답변

sys.stdout.write 반송하지 않고 인쇄합니다

import sys
sys.stdout.write("installing xxx")
sys.stdout.write(".")

http://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines


답변

가장 간단한 :

파이썬 3

    print('\r' + 'something to be override', end='')

그것은 무언가를 인쇄하고 같은 줄에서 끝나는 것보다 커서를 처음으로 되돌릴 것임을 의미합니다. 루프 상태이면 시작과 같은 장소에서 인쇄를 시작합니다.