2010-12-16 6 views
11

내가 파이썬 3.1에 간단한 프로그램을 작성하고 있었고, 난이 우연히 :Python3 수면() 문제

나는 그것이 의도 한대로 작동 IDLE에서이 작업을 실행하는 경우 - "Initializing." 인쇄 한 후 두 개의 점, 각각 하나씩 추가 초를 입력하고 입력을 기다립니다.

from time import sleep 

def initialize(): 
    print('Initializing.', end='') 
    sleep(1) 
    print(" .", end='') 
    sleep(1) 
    print(" .", end='') 
    input() 

initialize() 

문제는 그 파일을 실행하기 위해 평을 두 번 클릭하면 대신 pythonw.exe의 python.exe를 실행한다는 것입니다, 그리고 이상한 일들이 일어날 : 그것은 즉, 나를 만드는 모든 sleep() 번 조인 2 초 동안 기다린 다음 전체 문자열 Initializing. . .을 한 번에 인쇄합니다. 왜 이런 일이 생길까요? 터미널에서 일어나는 것을 피할 수있는 방법이 있습니까? IDLE을 Windows 및 Linux에서 모두 사용하면 올바르게 작동합니다.

+2

입니다 쓰기 후 sys.stdout.flush()을 추가해야합니다. 일반적으로'end'의 사용은 당신이 진행하고 즉시 무언가를 쓰는 것을 나타냅니다. –

답변

21

출력 버퍼링되고 있기 때문입니다.

당신은 아직 그것을`\의 n`을 부여하지 않았기 때문에 각 내가 그것을 버퍼링의 이유를 상상

+0

고마워,이게 해결 됐어! – roddds

+1

그리고 4 년이 지난 후에, 나는 실제로 이것이 결코 받아 들일 수없는 대답으로 설정 한 적이 결코 없다는 것을 알았습니다. – roddds

+5

파이썬 3의'print' 함수를 사용하면'flush' 매개 변수를 사용할 수도 있습니다. 'print (".", end = '', flush = True)' –

5

차이점은 stdout이 IDLE에서 자동으로 플러시된다는 것입니다. 효율성을 높이기 위해 프로그래밍 언어는 화면에 쓰기 전에 인쇄 호출을 많이 절약합니다. 느린 프로세스입니다.

다음은 당신이 필요로하는 답을 가지고 또 다른 질문 : How to flush output of Python print?