Backspace\b转义序列无法与多个print()函数一起使用

2024-05-21 00:39:06 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> print("x\by")
y

print("a", end="")
print("a", end="")
print("a", end="")
print("h", end="")

aaah

但是有了多个print语句,我得到了这个输出-

^{pr2}$

为什么它在每个字符后都打印出额外的空格。在

当从Windows命令行执行时,代码可以正常工作,我在Pycharm的控制台中测试了它。在

但是在pythonrepl中,\b会删除前一个字符,而它应该将光标向后移动一个字符。在

>>> print("a\b", end="")
>>>

Tags: 代码命令行bywindows语句字符pycharmend
3条回答

每个终端或控制台都可以自由地以不同的方式处理\b字符。Python所能做的就是将数据写到sys.stdout。在

在这里,您正在使用的控制台将光标向前移动以进行单独的写入调用,它显示。而且\b字符不会擦除控制台中的任何内容,它只会将光标移回同一个write call内的一个点。在

因此,对于print('x\by', end=''),控制台输出x,向后移动一步,在同一位置输出{},现在已经记录了它写入了3个字符,因此输出位置被设置为第3列。下一个print()将从新位置开始输出数据。在

您的print()代码恰好可以在大多数终端或控制台上工作,因为大多数终端或控制台不关心您输出多少字符,只关心光标当前的位置。但是你有一个行为不同的控制台并不是Python的错。在

使用Python交互式解释器时,要考虑到它也会打印;因此使用print("a\b", end="")会让Python用下一个>>>提示符覆盖该行:

>>> print("a\b", end="")
>>>

使用print("a\b\n", end="")代替,你会看到a仍然存在:

^{pr2}$

写在最后

Flush=true

我想这就是问题所在,试着在这里写下输出结果,因为现在我无法测试它

在这种情况下,flush=True是正确的答案


如果实际是在python控制台中打印,那么flush参数首先输出结果,然后完成函数。在多个转义字符的情况下,您应该看到退格符或任何其他打印出来的字符。我不知道为什么会发生这种情况,因为我刚刚开始使用Python,但是经过深入的研究和实验,我发现这是真的。在

相关问题 更多 >