2010-05-21 6 views
5

관련 질문/대답 here에서 누군가가 이맥스 (23.2) 내의 파이썬 쉘이 라인 버퍼 대신 블록 버퍼를 사용한다고 가정했습니다. 권장되는 해결 방법은 stdio에서 내용을 python-shell로 플러시 (flush)하기를 원할 때 스크립트에서 sys.stdout.flush()를 추가하는 것입니다.Emacs/Python : 라인 버퍼와 블록 버퍼 모드에서 실행중인

(리눅스가 아닌 Windows에서 emacs 23.2에서 실행되는) 파이썬 쉘을 a) 생각했는데 TTY에 연결되어 있다고 생각하거나 b) 블록 버퍼 모드 대신 라인 버퍼를 사용합니까? Idle에서이 작업을 수행 할 수있는 이유는 모르지만 이맥스는 아닙니다.

내 스크립트 전체에 sys.stdout.flush()를 추가하는 것보다 emacs를 사용자 정의하는 것이 좋습니다. 나에게 게으른 전화 :-).

감사합니다,

마이크 궁금 분들을 위해

답변

4

, 나는 관련 행동이 "조개와 하위 프로세스에 7.3 버퍼링 \ 7. 서브 프로세스"here, 이맥스에서 논의라고 생각합니다.

"셸 버퍼에서 stdout은 파이프 핸들이므로 블록으로 버퍼링됩니다. 프로그램의 버퍼링 동작을 다르게 동작 시키려면 프로그램 자체를 변경해야하므로 사용할 수 있습니다. setbuf 및 setvbuf를 사용하여 버퍼링 의미를 조작 할 수 있습니다. "

내 init.el에 다음을 추가하여 해결 (자세한 내용은이 SO 링크 here 참조)

(setenv "PYTHONUNBUFFERED" "x") 
+0

한자가 답변을 SO에 대한 좋은를 – msw

관련 문제