我正在使用 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,然后尝试猜测如何呈现它。它的猜测非常幼稚,虽然它确实考虑了有限数量的终端格式化转义序列,但它没有考虑回车符。光标移动到终端上的一行,并写入计算出的输出行,从而得到您所看到的结果。