프로그램 내에서 python의 버퍼링되지 않은 stdout(python -u에서와 같이)
중복 가능성:
Python 출력 버퍼링
내 코드 내에서 python -u 실행 효과를 얻을 수 있는 방법이 있습니까? 실패하면 내 프로그램이 -u 모드에서 실행 중인지 확인하고 그렇지 않은 경우 오류 메시지와 함께 종료할 수 있습니까? 이것은 Linux(우분투 8.10 서버)에 있습니다.
내가 생각해낼 수 있는 최선:
>>> import os
>>> import sys
>>> unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0)
>>> unbuffered.write('test')
test>>>
>>> sys.stdout = unbuffered
>>> print 'test'
test
GNU/Linux에서 테스트되었습니다. Windows에서도 작동해야 할 것 같습니다. sys.stdout을 다시 여는 방법을 안다면 훨씬 쉬울 것입니다.
sys.stdout = open('???', 'w', 0)
참조:
http://docs.python.org/library/stdtypes.html#file-objects
http://docs.python.org/library/functions.html#open
http://docs.python.org/library/ os.html#file-object-creation
[편집하다]
덮어쓰기 전에 sys.stdout을 닫는 것이 좋습니다.
shebang 라인에서 항상 -u 매개변수를 전달할 수 있습니다.
#!/usr/bin/python -u
Windows에 있다고 가정:
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
... 그리고 유닉스에서:
fl = fcntl.fcntl(sys.stdout.fileno(), fcntl.F_GETFL)
fl |= os.O_SYNC
fcntl.fcntl(sys.stdout.fileno(), fcntl.F_SETFL, fl)
(Unix는 링크가 아닌 주석이 달린 솔루션에서 복사했습니다.)
stderr이 버퍼링되지 않는다는 사실을 사용하고 stdout을 stderr로 리디렉션하려고 할 수 있습니다.
import sys
#buffered output is here
doStuff()
oldStdout = sys.stdout
sys.stdout = sys.stderr
#unbuffered output from here on
doMoreStuff()
sys.stdout = oldStdout
#the output is buffered again
doEvenMoreStuff()
ReferenceURL : https://stackoverflow.com/questions/881696/unbuffered-stdout-in-python-as-in-python-u-from-within-the-program
'IT이야기' 카테고리의 다른 글
python 프로젝트에 모든 종속성을 설치하기 위해 requirements.txt를 사용하는 방법 (0) | 2021.10.04 |
---|---|
WCF: 속성 대 구성원의 DataMember 특성 (0) | 2021.10.04 |
Java에 대한 단위 테스트의 자동 생성 (0) | 2021.10.04 |
word-wrap:break-word가 IE8에서 작동하지 않음 (0) | 2021.10.03 |
단일 코어에서 모두 실행되는 Python 스레드 (0) | 2021.10.03 |