Emacs/Python: running python-shell in line buffered vs. block buffered mode

你。 提交于 2019-12-01 17:15:13

问题


In a related question and answer here, someone hypothesized that python-shell within emacs(23.2) was block-buffered instead of line-buffered. The recommended fix was to add sys.stdout.flush() to the spot in my script where I want stdio to flush its contents to the python-shell.

Is there someway to trick python-shell (running in emacs 23.2 on Windows, not Linux) into either a) thinking it's attached to a TTY or b) using line-buffered instead of block-buffered mode? I don't see why I'd be able to do this in IDLE but not emacs.

I'd rather customize emacs than add sys.stdout.flush() throughout my scripts. Call me lazy :-).

Thanks,

Mike


回答1:


For those wondering, I think the relevant behavior is discussed here, in emacs "7. Subprocesses\ 7.3 Buffering in shells and subprocesses".

"In a shell buffer, stdout is a pipe handle and so is buffered in blocks. If you would like the buffering behavior of your program to behave differently, the program itself is going to have to be changed; you can use setbuf and setvbuf to manipulate the buffering semantics."

Solved by adding the following to my init.el (see this SO link here for more detail):

(setenv "PYTHONUNBUFFERED" "x")


来源:https://stackoverflow.com/questions/2881346/emacs-python-running-python-shell-in-line-buffered-vs-block-buffered-mode

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!