意外的 BPython 控制台输出行为

意外的 BPython 控制台输出行为

我正在使用 BPython 运行 Python 脚本,我发现控制台输出的行为与常规 Python 控制台不同。例如这个小片段:

import time
for i in range(100):
    time.sleep(.1)
    print("\r{}".format(i), end="")

Python 中的输出:

99                                            |
>>>                                           |

但在 BPython 中输出:

26                                            |
51                                            |
75                                            |
99                                            |
>>>                                           |
                                              ^ end of the console

这些明显随机的数字仅取决于我的控制台宽度。我怀疑 BPython 光标在每次调用时都会向右移动,print即使字符串以 开头\r。当它到达控制台的右端时,当前行就无法再被删除,因此会开始新的一行。

有什么办法可以解决这个问题吗?

更新:(错误报告那里

答案1

如果您需要此行为,我建议改用bpython-curses,因为(正如您所注意到的)标准 bpython 前端无法正确处理此问题。您的解释大致正确:bpython 将输出记录到假的 sys.stdout,然后尝试猜测如何呈现它。它的猜测非常幼稚,虽然它确实考虑了有限数量的终端格式化转义序列,但它没有考虑回车符。光标移动到终端上的一行,并写入计算出的输出行,从而得到您所看到的结果。

相关内容