Repository 32bit  Forum
Repository 64bit  Wiki

[bash] leggere stdout con dialog

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.

Re: [bash] leggere stdout con dialog

Messaggioda gioco » dom mag 18, 2008 16:35

spina ha scritto:Quello che chide danix si può comuque fare, basta creare uno scriptino che preleva i dati essenziali dall'output di cdrecord, ovvero il totale dei mega da scrivere e i mega scritti attualmente

Spina intendi una cosa del genere:
Codice: Seleziona tutto
echo "Track 01:  10 of  190 MB written (fifo 100%) [buf  99%]   8.2x." | cut -d ' ' -f4,7

?
Avatar utente
gioco
Packager
Packager
 
Messaggi: 900
Iscritto il: sab giu 18, 2005 23:00
Località: in the court of the Wesnoth king
Slackware: last stable

Re: [bash] leggere stdout con dialog

Messaggioda targzeta » dom mag 18, 2008 16:39

si, ma poi vanno rielaborati i dati e inviati a dialog. Dovrebbe bastare.

Spina
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: 6200
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] leggere stdout con dialog

Messaggioda targzeta » dom mag 18, 2008 17:11

Ok, ho trovato 10 minuti liberi :). Ecco cosa ho prodotto (non sono andato al bagno :D). Un piccolo file script che ho chiamato casa.sh:
Codice: Seleziona tutto
#!/bin/bash

IFS=$(echo -e '\n\t');
while read a; do
  dati=$(echo $a | tr -s ' ' '-' | cut -d'-' -f3,5);
  tot=${dati#*-}
  actual=${dati%-*}
  let perc=$actual*100/$tot;
  echo $perc;
done


e poi ho simulato l'output di cdrecord con:
Codice: Seleziona tutto
i=1; while (( $i <= 10 )); do echo "Track 01:  $i of  10 MB written (fifo 100%) [buf  99%]   8.2x."; let i++; sleep 1; done


e quindi ho messo tutto in pipe con:
Codice: Seleziona tutto
i=1; while (( $i <= 10 )); do echo "Track 01:  $i of  10 MB written (fifo 100%) [buf  99%]   8.2x."; let i++; sleep 1; done | sh casa.sh | dialog --gauge "ciao" 10 20


ed ha funzionato. Ora però non so se con cdrecord funziona uguale :). Spetta a danix85 darci una risposta.

facci sapere,
Spina
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: 6200
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] leggere stdout con dialog

Messaggioda danix » dom mag 18, 2008 21:56

Ciao spina, premetto che non è che ci ho capito molto dello script che mi hai postato...
ho messo su un cdrw vuoto e ho lanciato:
Codice: Seleziona tutto
$ cdrecord -v dev=/dev/hdc -dao -eject speed=8 immagine_iso.iso |sh script_spina.sh | dialog --gauge "prova gauge" 10 60 0

e mi ha restituito il prompt con la gauge piena di scritte strane e cdrecord non ha nemmeno iniziato a lavorare...

ho fatto una prova dirigendo lo stdout in un file di testo, questo è l'output:
Codice: Seleziona tutto
Cdrecord-ProDVD-ProBD-Clone 2.01.01a38 (i686-pc-linux-gnu) Copyright (C) 1995-2008 Jörg Schilling
TOC Type: 1 = CD-ROM
Using libscg version 'schily-0.9'.
atapi: 1
Device type    : Removable CD-ROM
Version        : 0
Response Format: 2
Capabilities   :
Vendor_info    : 'HL-DT-ST'
Identifikation : 'DVDRAM GSA-4167B'
Revision       : 'DL11'
Device seems to be: Generic mmc2 DVD-R/DVD-RW/DVD-RAM.
Current: CD-RW
Profile: DVD-RAM
Profile: DVD-R sequential recording
Profile: DVD-R/DL sequential recording
Profile: DVD-R/DL layer jump recording
Profile: DVD-RW sequential recording
Profile: DVD-RW restricted overwrite
Profile: DVD+RW
Profile: DVD+R
Profile: DVD+R/DL
Profile: DVD-ROM
Profile: CD-R
Profile: CD-RW (current)
Profile: CD-ROM
Profile: Removable Disk
Using generic SCSI-3/mmc   CD-R/CD-RW driver (mmc_cdr).
Driver flags   : MMC-3 SWABAUDIO BURNFREE
Supported modes: TAO PACKET SAO SAO/R96P SAO/R96R RAW/R16 RAW/R96P RAW/R96R
Drive buf size : 1053696 = 1029 KB
Drive pbuf size: 1966080 = 1920 KB
FIFO size      : 4194304 = 4096 KB
Track 01: data   190 MB       
Total size:      218 MB (21:41.18) = 97589 sectors
Lout start:      219 MB (21:43/14) = 97589 sectors
Current Secsize: 2048
ATIP info from disk:
  Indicated writing power: 5
  Reference speed: 2
Disk Is not unrestricted
Disk Is erasable
  ATIP start of lead in:  -12900 (97:10/00)
  ATIP start of lead out: 359849 (79:59/74)
  1T speed low:  0 (reserved val  0) 1T speed high:  4
  2T speed low:  0 (reserved val  5) 2T speed high:  0 (reserved val 12)
  power mult factor: 4 5
  recommended erase/write power: 3
  A1 values: 02 4A B0
  A2 values: 5C C6 26
Disk type:    unknown dye (reserved id code)
Manuf. index: -1
Manufacturer: unknown (not in table)
Manufacturer is unknown because of the orange forum embargo.
As the orange forum likes to get money for recent information,
it may be that this media does not use illegal manufacturer coding.

    Capacity  Blklen/Sparesz.  Format-type  Type
           0             2048         0x00  No Media Present or Unknown Capacity
Blocks total: 359849 Blocks current: 359849 Blocks remaining: 262260
Starting to write CD/DVD/BD at speed 4 in real SAO mode for single session.
Last chance to quit, starting real write    0 seconds. Operation starts.
Waiting for reader process to fill input buffer ... input buffer ready.
BURN-Free is ON.
Turning BURN-Free off
Performing OPC...
Sending CUE sheet...
Writing pregap for track 1 at -150
Starting new track at sector: 0
Track 01:  190 of  190 MB written (fifo 100%) [buf  99%]   4.1x.
Track 01: Total bytes read/written: 199862272/199862272 (97589 sectors).
Writing  time:  370.859s
Average write speed   3.5x.
Min drive buffer fill was 99%
Fixating...
Fixating time:   24.412s

dici che così facendo si può tirare fuori quanto manca e redirigerlo a dialog o c'è troppo spreco di risorse??
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: [bash] leggere stdout con dialog

Messaggioda targzeta » lun mag 19, 2008 16:09

Ciao,
lo scriptino non era niente di ché, leggeva dallo standard input e poi estrapolava dalle righe lette il totale dei mega da masterizzare e quello che ha masterizzato, quindi produceva la percentuale attuale e la passava a dialog.
Mi sembrava chiaro che tu dovessi filtrare le righe in input eliminando quelle che non c'entravano. Comunque io ho simulato tutto grazie al tuo output e sono riuscito a farmi mettere tutte le informazioni in un textbox e poi la percentuale in un gauge. Putroppo però quando ho provato a masterizzare il CD ho scoperto che cdrecord non manda niente nello standard output, e lo si può vedere anche da quello che hai postato tu, manda solo la riga con 190 mega su 190 mega.
Peccato perchè la simulazione mi era venuta veramente carina :).
Però il dubbio a questo punto mi viene naturale, e tutti i software grafici, che altro non fanno se non lanciare cdrecord in background, come fanno per prelevare le informazioni per la progress bar? Se uno usa anche mkisofs allora si può fare, infatti mkisofs posta sempre nello standard error delle righe nuove con tutte le info necessarie a creare una progress bar, infatti basta fare
Codice: Seleziona tutto
mkisofs tmp/ 2>/dev/stdout 1>/dev/null | (IFS=$(echo -e '\n\t'); while read a; do echo $a | sed -n '/%/{s/\([[:digit:]]\+\).*/\1/;p}';done) | dialog --gauge "ciao" 8 20
tutto funziona a dovere.
Però i software grafici permettono di masterizzare anche iso già create senza lanciare (mi auguro) mkisofs. Quindi come fanno? Questo è un interessante quesito :)

Spina
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: 6200
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] leggere stdout con dialog

Messaggioda danix » lun mag 19, 2008 23:07

Ciao spina,
premesso che "prenderò in prestito" il tuo scriptino casa.sh (che nome interessante, come ti è venuto in mente?? ) per usarlo nella dialog relativa a mkisofs, anche io credevo fosse più semplice catturare l'output di cdrecord... probabilmente la differenza tra uno script bash e uno dei vari programmi per masterizzare sta nel fatto che lo script bash è scritto in bash mentre i vari programmi useranno (presumibilmente) tutti C++ o robe del genere, non credi??
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti