Newsgroup: it.comp.os.linux.iniziare
Titolo: gzip, |, percentuale di completamento

un mio script tira un output di una ben determinata dimensione
la redireziono su un file così posso calcolare a che percentuale di
completamento è arrivato.
ora questo script lo vorrei buttare in | ad un gzip
script.sh|gzip -c >pippo
come faccio a sapere a che punto si trova l'output?
posso calcolare quanti byte ha tirato fuori script.sh?
tipo
script.sh|calcola.sh|gzip -c >pippo
calcola.sh potrebbe scrivere info su file o su stderr
non vorrei però avere un calo di performance, cioè non vorrei che
calcola.sh diventi un collo di bottiglia
idee?
Matteo


dimenticavo...
script.sh tira fuori un output binario
Matteo

 calcola.sh potrebbe scrivere info su file o su stderr
beh , ma all'interno di script.sh lo sai a che punto sei o no?

> posso calcolare quanti byte ha tirato fuori script.sh?
Cerca in rete lo script 'bar', ti mostra la classica barra, con la
percentuale e l'ETA.
Anche se poi non lo vuoi/puoi utilizzare, magari ti da qualche spunto...
Ciao.
-- 
*** Linux user # 198661 ---_ ICQ 33500725 ***
    ***  Home  
http://www.kailed.net
  ***
        ***  Powered by openSUSE  ***

 percentuale e l'ETA.
Scusa ma puoi essere piu' preciso, io lo cerco da un po di tempo quello script ma 
non sono mai riuscito a trovarlo. 
ps
Se scrivo "Linux bar" su google mi vengono fuori solo dati inutili   

 Matteo
-- 
Ciao.
Alessandro 
"Ubuntu" - an African word, meaning "Slackware is too hard for me".


si che posso, ma questo significa che creo un altro file altro.out;
si, monitorando questo so a che punto sono arrivato, ma a questo punto
a che mi serve gzippare l'output per risparmiare spazio quando poi
replico lo stesso file non compresso sul disco?
Matteo

 beh , ma all'interno di script.sh lo sai a che punto sei o no?
beh, fondamentalmente no.
immagina questa struttura
#!/bin/bash
inizializza
prepara
determina dim output
spara output
fine
è chiaro che quello che conta è 'spara output' che è un comando solo.
Matteo

> Se scrivo "Linux bar" su google mi vengono fuori solo dati inutili
cercalo in sourceforge
http://clpbar.sourceforge.net/
Mo gli do una occhiata
Matteo

 è chiaro che quello che conta è 'spara output' che è un comando solo.
ecco , spara output:
è un comando o un programma fatto da te?
nel secondo caso, dovresti modificarne il sorgente.
nel primo caso... mumble mumble ..
io lo farei con no scriptino in python nel seguente modo:
#!/bin/bash
inizializza
prepara
DIM=determina dim output
script.py $DIM
fine
lo script vuole in ingresso la dimensione finale ed all'interno apre
"spara output" popen
calcola la percentuale, scrive in un file i dati letti dalla popen e (a
sto punto ti ritrovi lo stdpout libero) stampa a schermo la percentuale di
dati letta
#!/usr/bin/python
import os
import sys
import popen2
r,w,e = popen2.popen3("spara output")
dim=eval(sys.argv(1))
f= open("nomefile","w")
scritti=0
while 1:
	buf = r.read(1024) #si legge un K alla volta
	if buf == '':
		break
	scritti = scritti + 1
	f.write(buf)
	perc = (scritti * 100) / dim
	print "siamo al %d per cento" % perc
f.close()
e.close()
r.close()
w.close()
sys.exit(0)
una cosa del genere dovrebbe andare
NB: PROGRAMMA NON TESTATO


Mai usato python
e dubito che deciderò di impararlo solamente per risolvere questo
problemino.
inoltre script.sh non è sempre uguale, anzi, potrebbe essere
addirittura un programma altrui, magari non bash o addirittura ELF
Matteo

pippo
SIZE=10000
while true;do
        Y=$(cat pippo |sed -e 's/%/\n/g' -e 's/^M//g'|egrep '^
+[0-9]+'|tail -1)
#nota: ^M è ottenuto con CTRL+V CTRL+M
        X=$[$Y+0]
        echo $X
done|Xdialog -gauge  "dim. ${SIZE}k" 0 0 &  PID=$!
dd if=/dev/zero bs=1024 count=$SIZE | bar -s ${SIZE}k -nc -nth -nt -nb
2> pippo
kill $PID
ovviamente il dd va sostituito con lo script.sh
è un po' elaborata (e si può fare di meglio... l'ho elaborato al volo)
e non lo userò così, ma rende l'idea
Matteo

Matteo Rossini wrote:

Non e' detto che altro.out debba essere per forza un normale file, puo'
essere ad esempio un named pipe (vedi man mkfifo, man fifo), che non occupa
spazio sul fs. 


 non occupa spazio sul fs.
il mio problema è proprio quello di calcolare quanti dati mi sono
stati passati tramite pipe.
se questi me li faccio passare per named pipe non credo che le cose
cambino di molto.
Matteo

Matteo Rossini wrote:

Hai controllato l'overhead che introduce lo script ? Io l'ho utilizzato
pochissimo ma mi pare di ricordare un discreto overhead (sulla cpu),
specialmente abilitanto l'ETA..
Giusto per tenerlo presente...


 cambino di molto.
Dall'altro lato della named pipe devi ovviamente mettere un qualcosa che ti
legga quanti dati arrivano, non so quanto sia facile farlo con semplice
script bash, senz'altro non dovrebbe essere difficile usando
perl/python/ruby o quello che piu' ti piace.



infatti avevo deciso di non utilizzarlo così come l'ho scritto proprio
per questo motivo (quella forma era decisamente un brutto abbozzo),
anche se gli ho disattivato tutto fuorchè la %
Matteo

 script bash
appunto. la difficoltà non è quella dello sdoppiaggio ma proprio
quello di misurare quanta roba mi passa la pipe.
non mi sono mai messo ad imparare altri linguaggi... un giorno lo
dovrò fare. Fondamentalmente io sono un sistemista, non un
programmatore, e bash lo uso per fare qualche scriptino (anche se
talvolta non è tanto -ino)
mi risulta chiarissimo che per aumentare prestazioni/performance/
possibilità devo imparare un perl e compagnia bella.
La differenza di questi con bash è che in quest'ultimo uso tutti i
comandi/sintassi/ecc che uso quotidianamente per l'amministrazione
della macchina, con gli altri devo imparare tutti i comandi da zero e
la maggior parte di questi sono fine a se stessi
Matteo

 problemino.
Ti semplicherebbe la vita in modi che non riesci neppure ad immaginare.
-- 
cc = callcc {|cc| cc.call cc}; cc.call cc

 la maggior parte di questi sono fine a se stessi
Ma non è affatto vero. Tutti i linguaggi di cui sopra (io consiglio
Python o Ruby) permettono di chiamare un altro eseguibile e manipolarne
in vario modo l'output (che va dal non manipolarlo e farlo stampare e
basta al prenderlo e farci quello che si deve). 
Il punto è nel 1988 Wall ha creato Perl perchè trovava programmare in
bash+sed+awk più scomodo che fare tutto in un ambiente integrato. A me
Perl non piace per nulla, ma questo non vuole dire che *effettivamente*
non sia più comodo. 
IMHO Ruby e Python sono *ancora* più comodi.



è certo che posso fare chiamate a comandi esterni, ma se devo fare
tante chiamate tanto vale scrivere in bash.
comunque si, so che ci sono molti vantaggi. e effettivamente (l'ho
detto?) prima o poi mi metterò a imparare il perl
ma non oggi... questo intendevo dire.
Matteo

 detto?) prima o poi mi metterò a imparare il perl
Fra l'altro non capisco perchè intestardirsi con Perl. Se non lo
conosci, fai solo più fatica ad imparare quello che un altro.



al di là delle potenzialità e facilità di apprendimento che possono essere 
più o meno difficili, non mi capita molto spesso di programmare.
non conoscendoli non posso dire né quale sia più potente né quale sia più 
facile.
mi capita molto di più di analizzare, fare debug, modificare, estrapolare 
pezzi già scritti di altri programmi.
e devo dire che di phyton mi ne è capitato qualcuno, di ruby finora neanche 
uno. mentre mi capita molto più spesso di incrociarmi con programmi perl.
interessante sarebbe conoscere anche un linguaggio compilabile, tipo il C++ 
(il C lo conosco anche se non approfondito, il C++ quasi per niente) o il 
java (mi ci sono messo una volta ma poi ho deciso che non avevo tempo, così 
ho imparato solo la sintassi base, il sufficiente per fare una ricerca e 
capirci qualcosa nei programmi già scritti).
Il problema è che ora per qualsiasi linguaggio non posso investire molto 
tempo.
Matteo 

 tempo.
Python lo puoi imparare in un finesettimana. Poi piano piano lo usi per
scriptarti le cose e lo impari così. Oltre che 'rompendo' su iclp :P



perchè?
vabbè va. Sabato darò una occhiata a phyton.
Avrei bisogno di:
1. un tutorial che spieghi le basi
2. un manuale di riferimento
formato elettronico (html, pdf, online, offline)
per manuale di riferimento intendo un manuale dove trovare tutto,
differente dal tutorial in cui invece si trova solo la base ordinato
per grado di necessità
Matteo

 per grado di necessità
Ci spostiamo su iclp? (io metto il follow/up e xpost, se non ti va di
seguire di la -- dove comunque troveresti più risposte --, comunque si
resta anche di qua).
Per il manuale di riferimento direi pydoc. Ci metti nomi di funzioni,
classi etc etc etc e ti da le risposte. Se vuoi un quadro d'insieme,
pydoc -p 8080 e ti apre un server web su quella porta tramite il quale
accedi a tutta la documentazione dei vari moduli installati.
Per il manuale introduttivo, c'è il classico su 
www.python.org
(it).
Libri più libri trovi 'How to think like a computer scientist (in
Python)' e 'Thinking in Python' di Eckel.
Poi puoi venire al Pycon di quest'anno. Non so se posso già parlare, ma
ci potrebbero essere grasse novità.
