代码之家  ›  专栏  ›  技术社区  ›  MikeRand

emacs/python:以行缓冲模式与块缓冲模式运行python shell

  •  5
  • MikeRand  · 技术社区  · 15 年前

    在相关的问题和答案中 here 有人假设emacs(23.2)中的python shell是块缓冲的,而不是行缓冲的。建议的修复方法是将sys.stdout.flush()添加到脚本中希望stdio将其内容刷新到python shell的位置。

    有没有办法欺骗python shell(在Windows的Emacs23.2中运行,而不是Linux)使其认为它是连接到tty的,或者b)使用行缓冲模式而不是块缓冲模式?我不明白为什么我可以在空闲的情况下这样做,但不能在Emacs中。

    我宁愿自定义Emacs,也不愿意在脚本中添加sys.stdout.flush()。叫我懒惰——)。

    谢谢,

    迈克

    1 回复  |  直到 13 年前
        1
  •  4
  •   Community CDub    8 年前

    对于那些想知道的人,我认为相关的行为已经被讨论过了。 here 在Emacs“7”中。子进程\7.3在shell和子进程中缓冲”。

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

    通过将以下内容添加到my init.el解决(请参见此so链接 here 有关详细信息:

    (setenv "PYTHONUNBUFFERED" "x")