web-dev-qa-db-ja.com

'\ b'(バックスペース)の用途は何ですか

私は今Pythonクラスを受講していて、バックスペース文字について学びました。改行(\ n)と同様に、バックスペースはASCII =コード8。私の先生はそれを使用する理由を考えることができませんでしたが、それがどのように使用されるかについて興味があります。おそらく歴史的な理由ですか?print("Hellow\b World")を試したとき、私はちょうど私が得たものを手に入れました予想:Hello World

バックスペース文字の理由は何ですか?また、どのように使用できますか?

編集:私はそれがpython固有ではないことを知っていますが、元の質問を書くとき、私は主にPythonについて考えていて、この事実を忘れました。私は」これをより明確にするために編集しようとしました。

4
Cullub

バックスペースは、カーソルをコンソール内で1文字戻すが、削除しない制御文字です。

バックスペース文字の理由は何ですか?また、どのように使用できますか?

これは、歴史的にASCIIの世界で アクセント付き 文字を印刷するために使用されていました。

たとえば、àは3文字シーケンスBS `を使用して(または、文字の16進値を使用して0x61 0x08 0x60)生成できます。

バックスペースの詳細を見る ここ

バックスペースキーとバックスペース文字

多くの人がこの2つを混同しています。キーボードのバックスペースキーには、前の文字を削除する(=カーソルを後ろに移動してその文字を削除する)ほぼ普遍的な機能があります。ただし、バックスペース文字 '\ b'は、カーソルをコンソールウィンドウ内の1位置だけ戻し、削除しません。

4
zar

たぶん、そこで何が起こっているのかを最初に理解するのに役立ちます。

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 ()

追伸:既存のプログラムの多くは、\b\r\033などの制御文字を使用してステータス行を表示します。最も人気があるのはおそらくwgetです。私はまた、少なくとも1つのpythonスクリプトによるそのような出力を見ました(私はもうどれを思い出せませんが)

4

これはPythonの機能ではありませんが、 [〜#〜] ascii [〜#〜] で定義されるシンボルです。 Pythonは(他のすべての言語と同様に)それをサポートするだけです。

より具体的には、最後に印刷された文字を消去するか、またはオーバープリントするために使用されるのは 制御文字 です。 ASCIIの最初のバージョンは、記号を出力する一般的な方法がそれらをプリンターに送信し、紙に文字を物理的に印刷することであった1963年に公開されました。これはウィキペディアからの抜粋です。

印刷制御文字は、最も初期の出力デバイスであるプリンターの物理的メカニズムを制御するために最初に使用されました。 [...]バックスペース文字(BS)は、印刷位置を1文字スペース後方に移動します。プリンタでは、これが最も頻繁に使用されるため、プリンタは文字をオーバープリントして、通常は使用できない他の文字を作成できます。端末やその他の電子出力デバイスでは、多くの場合、消去するバックスペース(BS、SP、BSシーケンス)を破壊するか、しない非破壊的なバックスペースを許可するソフトウェア(またはハードウェア)構成の選択肢があります。

3
Pavel

それがどのように機能するかの小さな例:

>>> name = "Robert" + "\b\b\b\b" + 'p' + "\b\b" + 'u'
>>> print(text)
Rupert
>>> print(list(text))
['R', 'o', 'b', 'e', 'r', 't', '\x08', '\x08', '\x08', '\x08', 'p', '\x08', '\x08', 'u']
>>> text += "\bob"
>>> print(text)
Robert
>>> print(list(text))
['R', 'o', 'b', 'e', 'r', 't', '\x08', '\x08', '\x08', '\x08', 'p', '\x08', '\x08', 'u', '\x08', 'o', 'b']
1
Koneser