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

5 投票
1 回答
1254 浏览
提问于 2025-04-15 22:59

在一个相关的问题和回答中,有人猜测在emacs(23.2)中运行的python-shell是使用块缓冲而不是行缓冲。推荐的解决办法是在我的脚本中想要将内容刷新到python-shell的地方添加sys.stdout.flush()。

有没有办法让python-shell(在Windows上的emacs 23.2中运行,而不是Linux)觉得它连接到了一个TTY,或者使用行缓冲而不是块缓冲模式?我不明白为什么在IDLE中可以做到,但在emacs中却不行。

我宁愿自定义emacs,而不是在我的脚本中到处添加sys.stdout.flush()。你可以说我懒 :-)。

谢谢,

Mike

1 个回答

4

对于那些好奇的人,我觉得相关的行为可以在这里找到讨论,具体是在emacs的“7. 子进程 7.3 在shell和子进程中的缓冲”。

“在一个shell缓冲区中,标准输出(stdout)是一个管道句柄,因此它是以块的形式进行缓冲的。如果你想让你的程序的缓冲行为有所不同,就需要修改程序本身;你可以使用setbuf和setvbuf来调整缓冲的方式。”

通过在我的init.el文件中添加以下内容解决了问题(更多细节请查看这个SO链接这里):

(setenv "PYTHONUNBUFFERED" "x")

撰写回答