Python-it.org forum # share your knowledge! ;)
Luglio 30, 2010, 06:12 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizie: [15/06/10] il conteggio dei messaggi nelle sezioni non tecniche del forum è stato disabilitato
 
   Home   Guida Regolamento Ricerca Accedi Registrati Python-it.org Doc Chat  
Apri il forum in una pagina a parte - È possibile fornire/richiedere supporto anche presso i canali IRC #python su Azzurra e #python.it su Freenode

Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Sovrascrivere una riga da terminale  (Letto 851 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
THeK3nger
python erectus
***

Livello reputazione: 0
THeK3nger non ha alcuna influenza
Scollegato Scollegato

Messaggi: 192


Mad Scientist


Mostra profilo WWW
« inserito:: Agosto 12, 2008, 16:56 »

Come potrei fare se volessi scrivere sovrascrivere una riga del terminale.

Per esempio ho un programma che scrive:

"operazione eseguita al X%"

e vorrei che quando scrive "operazione eseguita all'Y%" non lo scrive sotto bensì sovrascrive l'ultima frase scritta.

Con il C conoscevo un uso speciale di printf che lo faceva ma in python?
Registrato

Ho bisogno di prendermi una vacanza.
http://slashcode.wordpress.com -- my project home...
Python-it.org forum
« inserito:: Agosto 12, 2008, 16:56 »

 Registrato
Wolf
moderatore
python sapiens sapiens
*

Livello reputazione: 0
Wolf non ha alcuna influenza
Scollegato Scollegato

Messaggi: 1009



Mostra profilo WWW
« Risposta #1 inserito:: Agosto 12, 2008, 20:58 »

Puoi usare '\b' per spostare indietro il cursorse di una posizione in modo che il nuovo testo che aggiungi sovrascriva il precedente.
Registrato
crap0101
python sapiens
*****

Livello reputazione: 0
crap0101 non ha alcuna influenza
Scollegato Scollegato

Messaggi: 962


Long Live The New Flesh


Mostra profilo WWW
« Risposta #2 inserito:: Agosto 12, 2008, 22:52 »

oppure le curses, se non è eccessivo per il tipo di programma
Registrato

Rimangono solo ossa che ridono, brandelli di carne sulle colline e in lontananza il vento dell' alba e il fischio di un treno. (W.S. Burroughs - Pasto Nudo)
Piace all' uomo illudersi, ingannarsi di parole. Il più difficile della sua filosofia sarà sempre che arrivi a capire la propria lingua. (P.J. Proudhon)
THeK3nger
python erectus
***

Livello reputazione: 0
THeK3nger non ha alcuna influenza
Scollegato Scollegato

Messaggi: 192


Mad Scientist


Mostra profilo WWW
« Risposta #3 inserito:: Agosto 12, 2008, 23:20 »

Puoi usare '\b' per spostare indietro il cursorse di una posizione in modo che il nuovo testo che aggiungi sovrascriva il precedente.

mmm... un " print '\b'*10 " torna indietro di 10 caratteri giusto?

oppure le curses, se non è eccessivo per il tipo di programma

Effettivamente per il momento mi pare troppo. Ma me le sengo nel caso dovessi fare roba più complessa.
Registrato

Ho bisogno di prendermi una vacanza.
http://slashcode.wordpress.com -- my project home...
crap0101
python sapiens
*****

Livello reputazione: 0
crap0101 non ha alcuna influenza
Scollegato Scollegato

Messaggi: 962


Long Live The New Flesh


Mostra profilo WWW
« Risposta #4 inserito:: Agosto 13, 2008, 00:49 »

sì, tipo così:
for i in range(10000000): print i, '\b'*10,   # o str(i) + '\b'*10
solo che, se devi fare come hai scritto, (un contatore di percentuale o anche un contatore di tempo), forse è proprio meglio che usi le curses, ma solo per un fatto estetico. Se provi a lanciare quelle due righe che ho scritto sopra, noterai che si vede il cursore fare avanti e indietro freneticamente (almeno, sul mio terminale lo vedo così)
Registrato

Rimangono solo ossa che ridono, brandelli di carne sulle colline e in lontananza il vento dell' alba e il fischio di un treno. (W.S. Burroughs - Pasto Nudo)
Piace all' uomo illudersi, ingannarsi di parole. Il più difficile della sua filosofia sarà sempre che arrivi a capire la propria lingua. (P.J. Proudhon)
Wolf
moderatore
python sapiens sapiens
*

Livello reputazione: 0
Wolf non ha alcuna influenza
Scollegato Scollegato

Messaggi: 1009



Mostra profilo WWW
« Risposta #5 inserito:: Agosto 13, 2008, 00:52 »

Oppure fai una bella barra di caricamento tipo:
Codice:
0%          50%            100%
|============|========
Registrato
crap0101
python sapiens
*****

Livello reputazione: 0
crap0101 non ha alcuna influenza
Scollegato Scollegato

Messaggi: 962


Long Live The New Flesh


Mostra profilo WWW
« Risposta #6 inserito:: Agosto 13, 2008, 01:02 »

una domanda un pò OT:

mentre provavo a stampare con '\b' stavo usando time.sleep()
ebbè, notavo che se si scrive
print "numero"
sleep(1)
tutto ok,
invece se si scrive
print "numero",
sleep(1)
mettendo la virgola non viene stampato niente fino alla fine. Non sarebbe meglio che printasse  se il comando successivo è uno non-print? o ci sono delle ragioni particolari?
Registrato

Rimangono solo ossa che ridono, brandelli di carne sulle colline e in lontananza il vento dell' alba e il fischio di un treno. (W.S. Burroughs - Pasto Nudo)
Piace all' uomo illudersi, ingannarsi di parole. Il più difficile della sua filosofia sarà sempre che arrivi a capire la propria lingua. (P.J. Proudhon)
manzo
moderatore
python neanderthalensis
*

Livello reputazione: 0
manzo non ha alcuna influenza
Scollegato Scollegato

Messaggi: 467



Mostra profilo WWW
« Risposta #7 inserito:: Agosto 13, 2008, 08:53 »

Puoi usare '\b' per spostare indietro il cursorse di una posizione in modo che il nuovo testo che aggiungi sovrascriva il precedente.
oppure \r per tornare direttamente all'inizio di una riga:
>>> print "abbasso\r python"
 python
Registrato

#!/usr/bin/env python
(you,love,me)=('Madein zAr','0-*1+).()-/,-,',len('.signature')<<1)
print ''.join([you[give-me] for give in [ord(er)-me for er in love]])
manzo
moderatore
python neanderthalensis
*

Livello reputazione: 0
manzo non ha alcuna influenza
Scollegato Scollegato

Messaggi: 467



Mostra profilo WWW
« Risposta #8 inserito:: Agosto 13, 2008, 08:58 »

una domanda un pò OT:
mettendo la virgola non viene stampato niente fino alla fine. Non sarebbe meglio che printasse  se il comando successivo è uno non-print? o ci sono delle ragioni particolari?
in generale il device di ouput (stdout) è bufferizzato, la scrittura effettiva a video avviene ad ogni fine riga \n (implicito se non metti la virgola) oppure se esplicitamente fai un flush:
Codice:
sys.stdout.flush()
Registrato

#!/usr/bin/env python
(you,love,me)=('Madein zAr','0-*1+).()-/,-,',len('.signature')<<1)
print ''.join([you[give-me] for give in [ord(er)-me for er in love]])
THeK3nger
python erectus
***

Livello reputazione: 0
THeK3nger non ha alcuna influenza
Scollegato Scollegato

Messaggi: 192


Mad Scientist


Mostra profilo WWW
« Risposta #9 inserito:: Agosto 13, 2008, 11:26 »

Grazie a tutti. Per il momento ho usato 'r' seguito da uno sleep di un secondo (ho un thread che si occupa solo di disegnare la barra) quindi il cursore avanti e dietro non si nota tantissimo. smile
Registrato

Ho bisogno di prendermi una vacanza.
http://slashcode.wordpress.com -- my project home...
checkm
python habilis
**

Livello reputazione: 0
checkm non ha alcuna influenza
Scollegato Scollegato

Messaggi: 66



Mostra profilo WWW
« Risposta #10 inserito:: Settembre 12, 2008, 09:29 »

So che il post risulta vecchio ma io ho le mia suluzioni che ho usato per alcuni scriptini. :-)

La prima, la classica barretta roteante :-) :
load = "| \ - /"

while 1:
    for x in load:
        sys.stdout.write("\r%s" % x)
        time.sleep(0.05)
        sys.stdout.flush()

Oppure (con la percentuale):
for x in range(100):
    sys.stdout.write("\r%s%% Complete" % x)
    time.sleep(0.5)
    sys.stdout.flush()

O ancora con la barra di caricamento:
bar = ""

for x in range(100):
    sys.stdout.write("\r%s -> %s%%" % (bar, x))
    time.sleep(0.5)
    sys.stdout.flush()
    bar = bar + "="

Spero possa ancora essere utile a qualcuno
« Ultima modifica: Settembre 12, 2008, 09:38 da checkm » Registrato

crap0101
python sapiens
*****

Livello reputazione: 0
crap0101 non ha alcuna influenza
Scollegato Scollegato

Messaggi: 962


Long Live The New Flesh


Mostra profilo WWW
« Risposta #11 inserito:: Settembre 12, 2008, 20:56 »

AH! bello, soprattutto quello con la percentuale potrebbe tornarmi utile  smile
Registrato

Rimangono solo ossa che ridono, brandelli di carne sulle colline e in lontananza il vento dell' alba e il fischio di un treno. (W.S. Burroughs - Pasto Nudo)
Piace all' uomo illudersi, ingannarsi di parole. Il più difficile della sua filosofia sarà sempre che arrivi a capire la propria lingua. (P.J. Proudhon)
Emanuele
python erectus
***

Livello reputazione: 0
Emanuele non ha alcuna influenza
Scollegato Scollegato

Messaggi: 163


Mostra profilo
« Risposta #12 inserito:: Settembre 13, 2008, 12:07 »

@checkm

Davvero molto utili!!
Grazie.
Registrato
Python-it.org forum
   

 Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC XHTML 1.0 valido! CSS valido!