Repository 32bit  Forum
Repository 64bit  Wiki

[Bash] Nascondere cursore lampeggiante

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[Bash] Nascondere cursore lampeggiante

Messaggioda joe » mer mar 09, 2011 18:08

Ho un piccolo script che scarica alcune pagine ne fa il parse e restituisce a video alcune informazioni.
Per "abbellire" un attimo e sperimentare un po' ho voluto aggiungere un elmento in movimento per far capire che il programmino sta lavorando.
Siccome le pagine che deve scaricare sono più di una e più in generale le operazioni che compie sono diverse ho pensato di far stampare ad output qualcosa del genere:
Codice: Seleziona tutto
Operazione_1:
* Downloading page 1_________________  Done.
* Downloading page 2_________________  Done.
Operazione_2:
* Loading pippo_______________________ \


L'aspetto che mi interessa stà nell'ultima riga, che rappresenta un'operazione in corso: notare la barretta rotante in fondo alla riga "\" che poi ovviamente diventa "|", "/", "-", ecc.
Ok, il problema sta nel fatto che il cursore resta lì a lampeggiare proprio in corrispondenza della "barretta rotante". Cioè resta lì dove lo script è arrivato a stampare... però io vorrei nascondere il cursore in modo che si vedesse meglio la barretta che sta girando.
Si può fare in qualche modo?

La barretta rotante l'ho ottenuta con un ciclo "for i in \ | / - " messo dentro a un while [ 1 ] con un controllo e via dicendo... se serve posso postare direttamente il codice.... ma penso che il problema sia chiaro così.
Avatar utente
joe
Master
Master
 
Messaggi: 1958
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda targzeta » mer mar 09, 2011 18:27

Codice: Seleziona tutto
echo -e '\E[?25l'

Poi per ripristinarlo:
Codice: Seleziona tutto
echo -e '\E[?25h'


Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6176
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda joe » mer mar 09, 2011 20:06

Perfetto, precisamente quello che mi serviva. Grazie mille. :)

Già che siamo in argomento, in base alla vostra esperienza quali alternative ritenete interessanti rispetto alla baretta rotante?
Ovviamente il limite è la propria fantasia, ma magari ci sono scelte migliori di altre "a prescindere".
Si tratta solo di una curiosità eh...
Avatar utente
joe
Master
Master
 
Messaggi: 1958
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda freefred » gio mar 10, 2011 18:52

joe ha scritto:Perfetto, precisamente quello che mi serviva. Grazie mille. :)

Già che siamo in argomento, in base alla vostra esperienza quali alternative ritenete interessanti rispetto alla baretta rotante?
Ovviamente il limite è la propria fantasia, ma magari ci sono scelte migliori di altre "a prescindere".
Si tratta solo di una curiosità eh...


Piu' che altro (ma dipende ovviamente dai tempi) a me piace vedere la percentuale di quello che sta facendo uno script
o un programma in console, poi se graficamente accanto c'e' una barretta rotante o una barra di scorrimento, non e' molto importante.
(ma non sono un programmatore)

bye
Avatar utente
freefred
Linux 1.0
Linux 1.0
 
Messaggi: 87
Iscritto il: dom set 28, 2008 18:08
Slackware: 13.1
Kernel: 2.6.36.2
Desktop: kde 4.4.3

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda Mario Vanoni » gio mar 10, 2011 20:22

http://linux.die.net/man/1/pv
dovrebbe soddisfare gli ultimi due post.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda joe » gio mar 10, 2011 20:50

freefred ha scritto:
joe ha scritto:
Già che siamo in argomento, in base alla vostra esperienza quali alternative ritenete interessanti rispetto alla baretta rotante?
Ovviamente il limite è la propria fantasia, ma magari ci sono scelte migliori di altre "a prescindere".
Si tratta solo di una curiosità eh...


Piu' che altro (ma dipende ovviamente dai tempi) a me piace vedere la percentuale di quello che sta facendo uno script
o un programma in console, poi se graficamente accanto c'e' una barretta rotante o una barra di scorrimento, non e' molto importante.
(ma non sono un programmatore)

bye


Eh lo so...
Però capisci bene che per far apparire qualcosa che indichila percentuale di completamento di un certo "pacchetto" di operazioni implica l'introduzione di un calcolo più o meno complesso per stimare questa percentuale. Può non essere così banale e soprattutto può non essere così leggero da eseguire e addirittura rallentare in modo non trascurabile le stesse operazioni che sta eseguendo lo script.... A quel punto potrebbe essere un controsenso mostrare la percentuale.

La barretta rotante in fin dei conti consuma poco e dà l'idea che lo script stia lavorando... e sicuramente non ha alcuna utilità al di la dell'estetica, sono d'accordo su questo.
Mario Vanoni ha scritto:http://linux.die.net/man/1/pv
dovrebbe soddisfare gli ultimi due post.


Come useresti pv se lo script comprendesse il download di alcuni files con wget?
Avatar utente
joe
Master
Master
 
Messaggi: 1958
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda Mario Vanoni » gio mar 10, 2011 21:30

joe ha scritto:Come useresti pv se lo script comprendesse il download di alcuni files con wget?

Sinceramente ignoro, non avendo mai usato wget(1).
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda joe » sab mar 12, 2011 1:24

L'idea potrebbe essere questa:
- redirigere i dati scaricati non su un file bensì sullo standard output: wget -O - "$URL"
- poi prendere quell'output con una pipe e spedirlo in input a "pv" e scrivere l'utput di quest'ultimo sul file che sarà poi il file scaricato

Riassumendo, qualcosa del genere potrebbe funzionare:
Codice: Seleziona tutto
wget -q -O - "$URL" | pv > ${filescaricato}


Ma tutto ciò non risolve il discorso della percentuale di avanzamento, banalmente perchè pv non conosce la dimensione finale dei dati che stanno arrivando. Segnala solo una barra con freccetta che va avanti e indietro (e a quel punto tanto valeva la barretta rotante) e il tempo trascorso, nonchè la dimensione attuale del file in output e la velocità di accrescimento dello stesso che poi sarebbe più o meno la velocità di trasferimento dati.
Solo wget liscio quindi, come era prevedibile, può darci info precise dell'avanzamento in percentuale. Semplicemente perchè conosce in anticipo le dimensioni totali del file remoto che sta scaricando.

Diverso è il discorso dell'uso di pv per trasferire un file locale verso un indirizzo remoto (per esempio anche usando mv o cp). In quel caso abbiamo il file in locale e pv sa anche lui in anticipo quanto è grande riuscendo così a calcolare la percentuale del trasferimento completato.
Penso che sostanzioalmente il discorso sia questo.

Il mio intento era quello di rinunciare all'output di wget spedendo tutti i messaggi in /dev/null e poi ricreare un output personalizzato riuscendo a controllarlo a piacimento nella sua forma. Ma evidentemente mancano dei dati per ottenere la percentuale di avanzamento.

Il tutto ovviamente a titolo di completezza della questione wget più percentuale di completamento del processo.
Avatar utente
joe
Master
Master
 
Messaggi: 1958
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda Mario Vanoni » sab mar 12, 2011 14:09

joe ha scritto:Ma evidentemente mancano dei dati per ottenere la percentuale di avanzamento.

Il tutto ovviamente a titolo di completezza della questione wget più percentuale di completamento del processo.

fsck conosce il disco prima di partire, poi barra di progressione e percentuale raggiunta.

wget [option]... [URL]...
non lo sapra` mai, anche in due passi, se URL nel frattempo aggiunge e/o spegne infos?
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [Bash] Nascondere cursore lampeggiante

Messaggioda joe » sab mar 12, 2011 17:28

Giusto. Però in due passi qualcosa si può fare... accettando una ragionevole probabilità d'errore...
Se per esempio come URL consideriamo un file oppure una pagina html possiamo ritenere che questa resti delle stesse dimensioni per un tempo sufficentemente piccolo accettando eventuali errori che al limite comportano solo una barra di avanzamento che va oltre il 100% o che raggiunge la fine al 90% dei dati trasferiti... mi spiego:
l'opzione "-s" di pv consente di specificare le dimensioni dei dati trasferiti.
Per esempio:
Codice: Seleziona tutto
wget -q -O - "$URL" | pv -s $SIZE > ${filescaricato}


stabilisce che il 100% del trasferimento è raggiunto dopo aver completato i "$SIZE" bytes di dati.
Ora wget è in grado di stabilire le dimensioni di un file remoto. usando per esempio le opzioni "--spider -S". E lavorando quindi di sed e grep si può ottenere il valore in bytes di un file remoto.

Una volta conosciuto quel valore si usa il comando sopraindicato wget+"pv -s" specificando la grandezza del file.

Non so se mi sono spiegato:
Codice: Seleziona tutto
SIZE=$(wget -S --spider "$URL" 2>&1|grep Length |sed 's/.*: //')
wget -q -O - "$URL" | pv -s $SIZE> ${filescaricato}


Questo dovrebbe garantire con una probabilità d'errore accettabile a pv di conoscere in anticipo le dimensioni del trasferimento e quindi la percentuale di avanzamento e renderlo in grado di disegnare la barra di avanzamento in modo coerente.
Avatar utente
joe
Master
Master
 
Messaggi: 1958
Iscritto il: ven apr 27, 2007 10:21
Slackware: 14.0
Kernel: 3.2.29-smp
Desktop: KDE-4.8.5


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite