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]
键。
我是 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]
键。