Python 3.6 on linux:刷新我想写入标准输出的内容时出现问题

Python 3.6 on linux: Problem with flushing what i want to write to the stdout

我是 python 和 linux 的新手,我 运行 遇到了一个问题...

所以我正在尝试 运行 以下代码 (应该通知终端前面的人,程序还在运行ning,然后在1秒后删除那行):

import sys

while True:
   # do something

   sys.stdout.write("Still going...")
   time.sleep(1)
   sys.stdout.write("\r")
   sys.stdout.flush()

这在 python 3.8 上的 windows 上工作得很好,但是当我 运行 它在我的 linux vps 上和 python 3.6.9 通过 "python3" 命令它不会刷新“\r”,因此 "Still going..." 行只会被删除并在下次到达 sys.stdout.write("Still going...").

如果有人知道这里发生了什么 - 请告诉我 感谢您的帮助!

Windows、Mac OS 和 UNIXes 使用不同的字符编码新行。

  • Windows 使用 \r\n
  • Mac OS 使用 \r
  • UNIX 使用 \n

如果您希望您的程序是跨平台的,您应该使用 os.linesep 而不是 OS 特定的换行符


回复评论:

确实在 Windows,\r 只是在行首 return 而 \n 实际上开始了一个新行(参见 this StackExchange anwser很好的解释)。

我假设,在 windows 上,它允许您简单地在同一行上写,直到程序退出。

遗憾的是,它至少可以在 UNIX 上的某些终端上运行,但不一定在所有终端上运行...

作为变通方法,您可以使用 \b 字符来删除该行的最后一个字符,例如 [backspace] 键。