2013-01-15 1 views
2

: 라인 버퍼링이 성공하면라인 버퍼링는 MinGW/MSYS 파이썬에 실패 2.7.3 문제는이 간단한 스크립트에 의해 설명되어

import time, os, sys 
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 1) # line-buffer stdout 
print 'before sleep' 
time.sleep(10) 
print 'after sleep' 

는 다음 사이에 10 초 차이가있을 것입니다 두 줄의 인쇄. 그렇지 않다면 두 줄은 사실상 동시에 10 초 후 (파이썬이 시작되면) 동시에 나타납니다. 즉, 프로그램이 종료 될 때 라인이 인쇄됩니다.

Linux에서 "sys.stdout"라인이 포함되어 있으면 파일과 화면 모두에 라인 버퍼 동작이 나타납니다. 그 라인이 없으면 화면에 라인 버퍼링 된 동작이 있지만 파일에는 보이지 않습니다. 이것은 예상된다.

MSYS/MINGW 환경에서 "sys.stdout"줄을 생략하면 Linux와 동일한 동작을 볼 수 있습니다. 화면에는 줄 바꿈이 있지만 파일에는 줄 바꿈이 적용되지 않습니다. 이상한 무엇

는은 "sys.stdout"라인 , 나는 중 하나 화면 또는 파일에 라인 버퍼링을 볼 수 없다는 것입니다. 나는 리눅스에서와 같이이 둘 모두를 기대한다.

해결 방법을 제안 할 수 있습니까?

UNAME -a MINGW32_NT 6.0 FOO 1.0.11 (0.46/3/2) 2009-05-23 19시 33분는 i686 MSYS

: 여기

좀 더 정보의 고마워, -W.

답변

2

제 동료 중 한 명이 대답을 알고있었습니다.

WIN32에서는 줄 버퍼링이 지원되지 않습니다. 라인 버퍼링이 지정되면 전체 버퍼링으로 되돌아갑니다. 버퍼링되지 않은 출력을 사용할 수 있으며이를 해결하려면 WIN32에서 사용하는 것이 좋습니다. 나는 나의 간단한 테스트 프로그램에서 그것을 시도했고, 작동한다.

Ref .: http://msdn.microsoft.com/en-us/library/86cebhfs%28v=vs.71%29.aspx

관련 문제