5

在这里的一个相关问答中,有人假设 emacs(23.2) 中的 python-shell 是块缓冲的,而不是行缓冲的。推荐的修复方法是将 sys.stdout.flush() 添加到我希望 stdio 将其内容刷新到 python-shell 的脚本中的位置。

有没有办法欺骗 python-shell(在 Windows 上的 emacs 23.2 中运行,而不是 Linux)进入 a) 认为它附加到 TTY 或 b) 使用行缓冲而不是块缓冲模式?我不明白为什么我可以在 IDLE 但不能在 emacs 中执行此操作。

我宁愿自定义 emacs,也不愿在我的脚本中添加 sys.stdout.flush()。叫我懒惰:-)。

谢谢,

麦克风

4

1 回答 1

4

对于那些想知道的人,我认为在 emacs “7. Subprocesses\ 7.3 Buffering in shells and subprocesses”中讨论相关行为。

“在 shell 缓冲区中,stdout 是一个管道句柄,因此以块的形式进行缓冲。如果您希望程序的缓冲行为有所不同,则必须更改程序本身;您可以使用 setbuf 和 setvbuf操纵缓冲语义。”

通过将以下内容添加到我的 init.el 来解决(有关更多详细信息,请参见此处的 SO 链接):

(setenv "PYTHONUNBUFFERED" "x")
于 2010-05-21T15:18:28.383 回答