source

한 번에 여러 개의 물건을 한 줄에 하나씩 인쇄하려면 어떻게 해야 합니까?

manycodes 2023. 7. 5. 20:50
반응형

한 번에 여러 개의 물건을 한 줄에 하나씩 인쇄하려면 어떻게 해야 합니까?

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

Installing XXX...               [DONE]

저는 현재인쇄중다니입을 인쇄하고 .Installing XXX...처음에 그리고 나서 인쇄합니다.[DONE].

대신 인쇄하려면 어떻게 해야 합니까?Installing xxx...그리고.[DONE]같은 라인에서?


동일한 줄에 새 메시지를 작성하고 이전에 있었던 것을 대체하는 구체적인 문제는 이전 인쇄를 stdout으로 덮어쓰는 방법을 참조하십시오.여기서 대부분의 답변은 질문을 현재 줄 에 새 텍스트를 작성하는 것으로 해석했습니다.

싱글을 사용하는 문제에 대해서는print한 번에 여러 항목을 출력하려면 한 줄에 여러 항목(고정 텍스트/또는 변수)을 한꺼번에 인쇄하는 방법을 참조하십시오.

파이썬 3 솔루션

print()은 함수다허니다합용을음을 할 수 .end이 " " " " 인 \n(으)합니다. 빈에 새 .빈 문자열로 설정하면 줄 끝에 새 줄이 표시되지 않습니다.

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

install_xxx()
print("[DONE]")

파이썬 2 솔루션

의 .print()은 을 방지합니다.print()새 라인을 발행하는 경우(출력 끝에 추가 공간이 있음을 유의해야 합니다).

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

install_xxx()
print "[DONE]"

다음과 같이 간단히 사용할 수 있습니다.

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

그리고 출력은 다음과 같습니다.

something else

과잉 살상할 필요가 없는import sys끝에 있는 쉼표 기호에 주의하십시오.

3파이썬 3+ print("some string", end="");끝에 있는 새 줄 삽입을 제거합니다.로 자세히 help(print);

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

파이썬 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%

이 경우 플러시에 대한 추가 정보는 다음과 같습니다.'end=' 인수가 포함된 python print 문이 실행 중에 다르게 동작하는 이유는 무엇입니까?

사용하다sys.stdout.write('Installing XXX... ')그리고.sys.stdout.write('Done')이러한 방식으로 새 줄을 수동으로 추가해야 합니다."\n"인쇄 기능을 다시 생성하려는 경우.이를 위해 굳이 욕을 쓰지 않아도 될 것 같습니다.

가장 단순한 방법:

파이썬 3

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

이는 커서를 처음으로 되돌리고, 무언가를 인쇄하며, 같은 줄로 끝납니다.루프 상태일 경우 시작 위치와 동일한 위치에서 인쇄가 시작됩니다.

새 줄이 나타날 때까지 모든 답변이 일시 중지되었기 때문에 어떤 답변도 제게 도움이 되지 않았습니다.저는 간단한 도우미를 썼습니다.

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

Python은 인쇄의 끝으로 새 줄을 추가합니다.print 메서드에 새 줄 대신 공백을 추가하려면 python3에 end=' '를 사용합니다.python2의 경우 print 문 끝에 쉼표를 사용합니다.

print('Foo', end=' ')
print('Bar')

이 간단한 예제는 동일한 줄에 1-10개를 인쇄합니다.

for i in range(1,11):
    print (i, end=" ")

인쇄에는 선택 사항이 있습니다.end논쟁, 그것은 결국 인쇄된 것입니다.줄이지만 문자열로 할 수 를 들어, " " " " " " " 입니다.print("hello world!", end="")

이 이전 행에 하는 것이 , 이전 행을 , 은 이줄에계추대이줄다덮수있결다니습합전할음을면어를 결합할 수 .\r와 함께print(),인쇄 문 끝에 표시됩니다.를 들면 를들면예,

from time import sleep

for i in xrange(0, 10):
    print("\r{0}".format(i)),
    sleep(.5)

print("...DONE!")

콘솔의 이전 번호를 대체하여 0에서 9까지 카운트합니다."...DONE!"마지막 카운터인 9번과 같은 줄에 인쇄됩니다.

OP의 경우 콘솔에서 설치 완료율을 "진행 표시줄"로 표시할 수 있습니다. 여기서 시작 및 끝 문자 위치를 정의하고 그 사이에 마커를 업데이트할 수 있습니다.

print("Installing |XXXXXX              | 30%"),

다음은 @Vadim-Zin4uk의 3.0 버전에서 파생된 2.7 호환 버전입니다.

파이썬 2

import time

for i in range(101):                        # for 0 to 100
    s = str(i) + '%'                        # string for output
    print '{0}\r'.format(s),                # just print and flush

    time.sleep(0.2)

그런 점에서, 제공된 3.0 솔루션은 약간 비대해 보입니다.예를 들어 백스페이스 메소드는 정수 인수를 사용하지 않으므로 완전히 제거할 수 있습니다.

파이썬 3

import time

for i in range(101):                        # for 0 to 100
    s = str(i) + '%'                        # string for output
    print('{0}\r'.format(s), end='')        # just print and flush

    time.sleep(0.2)                         # sleep for 200ms

두 가지 모두 테스트를 거쳐 작동합니다.

이것은 매우 오래된 스레드이지만, 여기 매우 철저한 답변과 샘플 코드가 있습니다.

\rASCII 문자 집합에서 캐리지 리턴을 나타내는 문자열입니다.8진수와 같습니다.015[chr(0o15)[16진법]0d[chr(0x0d) decimal ] 입니다.13[chr(13)조]man ascii재미없는 읽을거리로그것(\r는 휴대성이 뛰어나고 사람들이 읽기에 충분히 쉽습니다.그것은 매우 간단하게 종이를 전진시키지 않고 타자기의 캐리지를 처음부터 끝까지 이동시키는 것을 의미합니다.그은입니다.CRCRLF, 캐리지 리턴과 라인 피드를 의미합니다.

print() 3165 Python 3의 입니다. 2 버전)에서 Python 2(사용자가 원하는 버전)는print 의를가함강적수있제다용니습에서 에 강제로 할 수 .__future__모듈. 의이print기은마지능막인쇄내할의 하고 마지막에 인쇄할 내용을 할 수 .\n매번 마지막에 새 행을 인쇄합니다.print()콜.콜.

sys.stdout.flushPython에 표준 출력의 출력을 플러시하도록 지시합니다. 여기서 출력을 전송할 수 있습니다.print()달리 명시하지 않는 한.를 실행하여 동일한 동작을 얻을 수도 있습니다.python -uPYTHONUNBUFFERED=1따라서 생략합니다.import sys그리고.sys.stdout.flush()호출합니다. 이렇게 함으로써 얻을 수 있는 양은 거의 정확히 0이며 응용 프로그램이 제대로 작동하기 전에 해당 단계를 수행해야 한다는 것을 쉽게 잊어버린 경우 디버깅하기가 쉽지 않습니다.

그리고 샘플.이것은 Python 2 또는 3에서 완벽하게 실행됩니다.

from __future__ import print_function

import sys
import time

ANS = 42
FACTORS = {n for n in range(1, ANS + 1) if ANS % n == 0}

for i in range(1, ANS + 1):
    if i in FACTORS:
        print('\r{0:d}'.format(i), end='')
        sys.stdout.flush()
        time.sleep(ANS / 100.0)
else:
    print()

Python 3.X의 이 솔루션은 다음과 같습니다.

이 작업을 수행해야 할 때는 일반적으로

end=' '

예:

# end='' ends the output with a <space> 
print("Welcome to" , end = ' ') 
print("stackoverflow", end = ' ')

이 출력은 다음과 같습니다.

Welcome to stackoverflow

end=모든 문자로 대체할 수 있습니다.를 들면 를들면예,

print("Welcome to" , end = '...') 
print("stackoverflow", end = '!')

다음과 같이 출력됩니다.

Welcome to...stackoverflow!

print()으로 " 변수가 으로 "로 설정되어 있습니다."\n"하기 르기print("This is America")실제로 전화를 하고 있습니다.print("This is America", end = "\n")쉬운 방법은 전화하는 것입니다.print("This is America", end ="")

값을 배열에 미리 저장한 경우 다음 형식으로 호출할 수 있습니다.

for i in range(0,n):
       print arr[i],

이 Quora 게시물을 찾았습니다. 이 예시는 제가 필요로 하는 것에 더 가까웠습니다(즉, 이전 줄 전체를 지우는 것).

예는 다음과 같습니다.

def clock():
   while True:
       print(datetime.now().strftime("%H:%M:%S"), end="\r")

다른 사람들이 제안한 것처럼 동일한 라인에서 인쇄하는 경우에는 다음을 사용합니다.end=""

이 솔루션을 찾았는데 Python 2.7에서 작동합니다.

# Working on Python 2.7 Linux

import time
import sys


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


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

언급URL : https://stackoverflow.com/questions/5598181/how-can-i-print-multiple-things-on-the-same-line-one-at-a-time

반응형