한 번에 여러 개의 물건을 한 줄에 하나씩 인쇄하려면 어떻게 해야 합니까?
기본적으로 다음과 같은 출력을 보여주는 스크립트를 실행하려고 합니다.
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
두 가지 모두 테스트를 거쳐 작동합니다.
이것은 매우 오래된 스레드이지만, 여기 매우 철저한 답변과 샘플 코드가 있습니다.
\r
ASCII 문자 집합에서 캐리지 리턴을 나타내는 문자열입니다.8진수와 같습니다.015
[chr(0o15)
[16진법]0d
[chr(0x0d)
decimal ] 입니다.13
[chr(13)
조]man ascii
재미없는 읽을거리로그것(\r
는 휴대성이 뛰어나고 사람들이 읽기에 충분히 쉽습니다.그것은 매우 간단하게 종이를 전진시키지 않고 타자기의 캐리지를 처음부터 끝까지 이동시키는 것을 의미합니다.그은입니다.CR
의 CRLF
즉, 캐리지 리턴과 라인 피드를 의미합니다.
print()
3165 Python 3의 입니다. 2 버전)에서 Python 2(사용자가 원하는 버전)는print
의를가함강적수있제다용니습에서 에 강제로 할 수 .__future__
모듈. 의이의 print
기은마지능막인쇄내할의 하고 마지막에 인쇄할 내용을 할 수 .\n
매번 마지막에 새 행을 인쇄합니다.print()
콜.콜.
sys.stdout.flush
Python에 표준 출력의 출력을 플러시하도록 지시합니다. 여기서 출력을 전송할 수 있습니다.print()
달리 명시하지 않는 한.를 실행하여 동일한 동작을 얻을 수도 있습니다.python -u
PYTHONUNBUFFERED=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
'source' 카테고리의 다른 글
mongoose에서 스키마를 전달하지 않고 컬렉션 쿼리 (0) | 2023.07.05 |
---|---|
"참조" 권한이 필요한 이유는 무엇입니까? (0) | 2023.07.05 |
mariadb에서 데이터 디렉토리 변경 (0) | 2023.07.05 |
FCM에 대한 올바른 토큰 검색 방법 - iOS 10 Swift 3 (0) | 2023.07.05 |
R에서 CRAN 미러를 선택하는 방법 (0) | 2023.07.05 |