Emacs/Python:在行缓冲模式和块缓冲模式下运行python-shell

5
在一个相关的问答,有人假设emacs(23.2)内的python-shell使用块缓冲而非行缓冲。推荐的解决方法是在脚本中加入sys.stdout.flush(),以使stdio将其内容刷新到python-shell。
有没有办法欺骗python-shell(在Windows上运行的emacs 23.2,而不是Linux),以让它认为自己已连接到TTY或使用行缓冲模式而不是块缓冲模式?我不明白为什么我可以在IDLE中做到这一点却无法在emacs中实现。
与其在脚本中添加sys.stdout.flush(),我更愿意自定义emacs。请原谅我的懒惰 :-)
谢谢, Mike
1个回答

4
对于那些想知道的人,我认为相关行为在这里here讨论,在emacs中“7.子进程\ 7.3 shell和子进程中的缓冲区”中。在shell缓冲区中,stdout是一个管道句柄,因此以块方式缓冲。如果您希望程序的缓冲行为有所不同,则必须更改程序本身;您可以使用setbuf和setvbuf来操作缓冲语义。通过将以下内容添加到我的init.el中解决了问题(有关详细信息,请参见此SO链接here):
(setenv "PYTHONUNBUFFERED" "x")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接