2013-08-15 3 views
7

kann ich ein caracter zurück \b mit:Was kann ich verwenden, um in einem Terminal in Python einen Zeilenumbruch zu machen?

>>> print("123#456") 
123#456 
>>> print("123#\b456") 
123456 

Aber es funktioniert nicht, wenn ein Zeilenumbruch beteiligt ist:

>>> print("123#\n456") 
123# 
456 
>>> print("123#\n\b456") 
123# 
456 

Gibt es eine Möglichkeit zu brechen zu gehen Linie zurück?

Ich frage das, weil ich einen Fortschritt bei der vorherigen Zeile haben:

53%

Und ich \b den Wert zu aktualisieren. Aber wenn jemand etwas druckt, bricht es es. Ich habe versucht, einen Puffer aus Strings zu erstellen und genug '\ b' zu drucken, um es zu kompensieren, und dann den Puffer zurück zu drucken. Aber es funktioniert nicht, wenn es Zeilenumbrüche gibt.

+0

Im Allgemeinen vermeiden Sie das Drucken der Newline, oder Sie verwenden Flüche. Im standardzeilenorientierten Textmodus auf POSIX-Systemen können Sie den Zeilenumbruch nicht zurücknehmen. –

+0

Sie sehen das gleiche Verhalten für * alle * Fortschrittsbalken für Befehlszeilendienstprogramme. Verwenden Sie 'wget', um eine große Datei zu erhalten, und drücken Sie die Eingabetaste, während sie heruntergeladen wird. –

+0

input.replace ('\ n', '') - ist das Hilfe? –

Antwort

9

Eine mögliche (ein bisschen hacky) Lösung ist es, '\ 033 [1A' zu verwenden, um eine Zeile zurückzugehen. Ersetzen Sie 1 durch die Anzahl der Zeilen, um zurückzuspringen. Es gibt mehrere andere Escape-Sequenzen, mit denen Sie den Cursor manipulieren können. Schauen Sie sich die komplette Liste an: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html

- Position the Cursor: 
    \033[<L>;<C>H 
    Or 
    \033[<L>;<C>f 
    puts the cursor at line L and column C. 
- Move the cursor up N lines: 
    \033[<N>A 
- Move the cursor down N lines: 
    \033[<N>B 
- Move the cursor forward N columns: 
    \033[<N>C 
- Move the cursor backward N columns: 
    \033[<N>D 

- Clear the screen, move to (0,0): 
    \033[2J 
- Erase to end of line: 
    \033[K 

- Save cursor position: 
    \033[s 
- Restore cursor position: 
    \033[u 

Beachten Sie, dass dies wahrscheinlich nicht für alle Endgeräte arbeiten.

Verwandte Themen