2013-08-15 19 views
7

posso andare un caracter indietro con \b:Cosa posso usare per tornare indietro di una riga in un terminale in Python?

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

Ma non funziona se un'interruzione di linea è coinvolto:

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

C'è un modo per andare linea di rompere di nuovo?

che sto chiedendo questo perché ho un corso alla riga precedente:

53%

E io uso \b per aggiornare il valore. Ma se qualcuno stampa qualcosa, lo spezza. Ho provato a creare un buffer di stringhe e stampare abbastanza "\ b" per compensare, quindi stampare il buffer indietro. Ma non funziona se ci sono interruzioni di riga.

+0

In genere, si evita di stampare la nuova riga o si utilizzano le curses. Nella modalità di testo orientata alla linea predefinita sui sistemi POSIX, non è possibile riprendere il ritorno a capo. –

+0

Si vede lo stesso comportamento per * tutte * le barre di avanzamento per le utilità della riga di comando. Usa 'wget' per ottenere un file di grandi dimensioni, quindi premi Invio mentre scarica. –

+0

input.replace ('\ n', '') - è quella guida? –

risposta

9

Una possibile soluzione (un po 'hacky) consiste nell'utilizzare' \ 033 [1A 'per tornare indietro di una riga. Sostituisci 1 con il numero di linee per tornare indietro. Ci sono molte altre sequenze di escape che puoi usare per manipolare il cursore. Controlla la lista completa a: 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 

Nota che questo non sarà probabilmente funzionerà per tutti i terminali.