'\b'(退格)有什么用

Cul*_*lub 9 ascii backspace

我现在正在上 Python 课,我刚刚了解了退格字符。和换行符 (\n) 一样,退格是一个特殊字符,ASCII 码为 8。我的老师想不出使用它的理由,但我很好奇它是如何使用的。也许只是历史原因?当我尝试时print("Hellow\b World"),我得到了我所期望的:Hello World

退格字符的原因是什么,如何使用它?

编辑:我知道它不是特定于 python 的,但是在编写原始问题时,我主要考虑的是 Python 并忘记了这个事实。我试图编辑以使其更清楚。

zar*_*zar 9

Backspace 是一个控制字符,它将光标在控制台中向后移动一个字符,但不会删除它。

退格字符的原因是什么,如何使用它?

历史上,它在 ASCII 世界中用于打印带重音的字符。

例如 à 可以使用三个字符序列生成a Backspace `(或者,使用字符的十六进制值,0x61 0x08 0x60)。

此处查看有关退格的更多信息

退格键与退格字符

很多人把这两者混为一谈。键盘上的退格键几乎具有删除前一个字符的通用功能(= 将光标移回并删除该字符)。'\b'然而,退格字符只会将光标移回控制台窗口中的一个位置,而不会将其删除。


Sam*_*ner 6

也许首先了解那里发生的事情会有所帮助:

print()正在写入标准输出,它正在写入所有内容,包括w和退格。

现在必须有一些东西来显示它。很可能是终端模拟器。

理论上会发生的情况是w显示然后删除,但它没有被刷新,并且要快到它实际发生。

所以现实生活中的应用程序几乎总是在打印文本的开头使用 \b。

我写了一个简短的例子,它会在进度指示器上有一个小旋转器。示例打印"-"后跟"\b\\"(删除-并替换为\)后跟"\b|"(删除\并替换为|)等等。

这种方式- \ | / - \ | /看起来像一条动画旋转线。

#!/usr/bin/env python3
import time

spinner="\\|/-"
print ("----------\r", end='', flush=True)
for pos in range(10):
    print ("-", end='', flush=True)
    for spin in range(25):
        #here should be a break as soon as some task proceeded further
        time.sleep(0.1)
        print ("\b" + spinner[spin % 4], end='', flush=True)
    print ("\b*", end='', flush=True)
print ()
Run Code Online (Sandbox Code Playgroud)

PS:许多现有程序使用控制字符\b \r \033来显示状态行。最受欢迎的可能是 wget。我也看到过至少一个 python 脚本的这样的输出(虽然我已经不记得是哪一个了)