Backspace \ b转义序列不适用于多个print()函数

时间:2016-05-07 07:52:00

标签: python python-3.x pycharm

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

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

aaah

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

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

a a a h 

为什么在每个角色后打印额外的空间。

从Windows命令行执行代码时,代码运行正常,我在Pycharm的控制台中进行了测试。

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

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

3 个答案:

答案 0 :(得分:4)

每个终端或控制台都可以自由地处理\b字符。所有Python都可以将数据写出sys.stdout

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

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

您的print()代码恰好适用于大多数终端或控制台,因为大多数终端或控制台都不关心您输出的字符数,只关注光标当前所在的位置。但是你有一个行为不同的控制台是而不是Python的错误

使用Python交互式解释器时,请考虑 it too 打印;所以使用print("a\b", end="")离开Python然后用下一个>>>提示覆盖该行:

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

改为使用print("a\b\n", end=""),您会看到a仍然存在:

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

答案 1 :(得分:0)

在这种情况下,

flush = True是正确的答案

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

答案 2 :(得分:-2)

写到最后

Flush=true

我认为这是问题尝试并在这里写下输出会有什么,因为现在我无法测试它。(从手机写)