

print関数の中で \b を使って文字を削除ができません。  
例えば、

[code]

    print('abc\b')
    
[/code]

と打つと

[code]

    ab
    
[/code]

が返るはずですが、自分のパソコンでは、

[code]

    abc・
    
[/code]

と'・'が出力されます。

pythonは3.6.3で、Anacondaを使っています。  
ウェブで調べてみても同じ事象についての記述は見つからなかったので、教えてください。  
なお、「退屈なことはPythonでやらせよう」の18章の参考プログラムの一環で上記をやろうとしています。

# 解決しました。ありがとうございます。

metropolisさんのご指摘通り、IDLE上ではなく、コマンドプロンプト上で実行すると'\b'が機能し、期待通りの動きとなりました。  
本の中の「IDLEではなく、コマンドプロンプトや端末ウィンドウを開いて実行してください。」という記述を見逃していました。  
皆様お手数おかけしました。

sys.pyautogui.textwrite()での解決策も勉強になりました。  
ただ、他のウィンドウをクリックすると、ほかのウィンドウに字が打ち込まれてしまうところが、  
危なっかしいですね。

## 解決前の追記内容↓

皆さんありがとうございます。

### 試し打ち1 dkatoさんの

[code]

    print('abc\bdef')
    
[/code]

と入力すると、

[code]

    abc・def
    
[/code]

と出力されました。

### 試し打ち2 metropolisさんの

[code]

    print('abc\b', end='')
    
[/code]

と入力すると、

[code]

    abc・
    
[/code]

と出力されました。  
（・の部分は、このウェブサイトの入力欄では”□（白抜きの四角形）”に表示されています。）

metropolisさんの引用によると上記「試し打ち1」は、

abdefc

と出力されるのではないでしょうか。僕のOSでは、\bがまた違う動きをするようです。

OSはWindows10 Home version1709です。  
パソコンは、Lenovo ideapad 720S-13IKBです。  
もしかしたらOSを英語版に切り替える必要があるのでしょうか。  
コードも書きたいところですが、著作権上そのまま書くわけにはいかないのではないかと思います。対象の行だけ書くと、

[code]

    print('\b' * len(x), end='', flush=True)
    
[/code]

となっています。'x'は文字列です。

ちなみにそもそもの目的は、プログラムでコマンドラインに表示した文字を自動で更新していく書き換えることです。（マウスの座標を連続的にコマンドラインに表示するプログラムです。）  
自分のパソコンでbackspaceとなるエスケープシーケンスを探してみたいと思います。  
また、当初の目的について他の方法があれば、ヒントをくださると大変ありがたいです。


CC BY-SA 3.0
2018-02-13T23:19:53.187
41697
2018-02-14T23:00:37.243
2018-02-14T23:00:37.243
27118
27118
question
python3
printでバックスペースができない。


`print`はあくまで指定された文字列を出力する機能しか持ちません。出力先（たぶん端末？）が受け取った文字列をどう解釈するか、どう解釈するように設定されているかの問題です。  
質問文では出力先のOSや端末が言及されていませんが、結果から見るに`\b`に対して文字を削除するよう設定されていないだけではないでしょうか？

「退屈なことはPythonにやらせよう」著者もその辺りのことを把握せず記載した、もしくは書籍のどこかに必要な設定が記載されているのかもしれません。


CC BY-SA 3.0
2018-02-13T23:35:24.240
41698
2018-02-13T23:35:24.240
4236
41697
answer


こちらでは、以下のようになりました。

> print("abc\b")  
>  abc
>
> print("abc\bXYZ")  
>  abXYZ

環境は、 Windows10 (64bit) PowerShell から、Python3 を実行 (日本語環境)  
~~ただし、PowerShell の環境は変更してあり、ctrl-H, ctrl-M がそれぞれ、BackSpace, CR となるようにしてあります。~~
(関係ありませんでした)  
~~どのように変更したかは、確認後、追記したいと思いますが、参考情報として、記載します。  
多分、この辺の影響があるのでは無いかと推測しますが、どうでしょうか?~~

* * *

既にコメントが付いていました。  
余談ですが、 "\r" ... カーソル位置が行頭に移動します。 (こちらが使えれば、上書きは容易です)  
"123456789\rabc " ⇒ "abc 6789"  
"\b"がうまく動作しない状況で難しいとは思いますが、、、。


CC BY-SA 3.0
2018-02-14T12:36:10.227
41710
2018-02-14T14:09:45.500
2018-02-14T14:09:45.500
41697
answer