【问题标题】:Python carriage return not workingPython回车不起作用
【发布时间】:2014-10-27 01:16:22
【问题描述】:

我有一个长时间运行的脚本,它循环数据库中的行。每隔一段时间,我希望它打印处理了多少行,但每次都不需要创建新行。这基本上就是我所拥有的:

import sys
mystr = "{} rows complete\r"

for i in range(0, 100):
    if i % 10 == 0:
        sys.stdout.write(mystr.format(i))
        sys.stdout.flush()

当我运行它时(在 Python 2.7.5 64 位 Windows 上)我得到:

0 rows complete
10 rows complete
20 rows complete
...
100 rows complete

谁能想到为什么回车不起作用?我在这里看到了一些关于 Python 和 \r 的类似问题,但所有答案都说包括 sys.stdout.flush(),我有。

【问题讨论】:

  • 这是在 Windows 上执行的吗?
  • 是的,它在 Windows 上。
  • 在 Python 2.7.7 和 3.3 上为我工作(尽管调用 time.sleep() 有助于查看前面的行。不同之处可能是我运行的是 32 位版本,或者0.0.2 版本差异,或者可能是您运行它的方式:您是如何运行脚本的?我从 powershell 和 cmd.exe 都尝试过,它对我来说都适用。
  • 如果从 Powershell ISE 运行,它确实会出错。您是否使用 Powershell ISE 来运行您的脚本?
  • 啊,你知道什么——我是从我的文本编辑器(Sublime Text)的控制台运行它的。当我通过 cmd.exe 运行它时,它运行良好!感谢您为我指明正确的方向。

标签: python stdout


【解决方案1】:

使用\r 可能是正确的方法,但行为很大程度上取决于文本的输出方式。并非所有终端都会尊重回车:

cmd.exepowershell.exe 都应该以您期望的方式输出文本(Powershell ISE 不会,但这是一个红鲱鱼)。

Python 自己的idle 将忽略回车,所有输出都在一行中。

如您所述,您自己的编辑器的命令窗口也会忽略 \r

此外,如果您从交互式窗口尝试,您还会在每行的末尾得到一些数字输出:这是因为交互式窗口有助于将调用结果输出到 sys.stdout.flush()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多