Ciao a tutti... a un certo punto del mio programma ho messo un
SHELL "wget link/file.zip; mv file.zip $HOME
nella veste grafica ho posizionato una progressbar.... volevo chiedere se c'e modo di far interagire il suo avanzamento con l'avanzamento di wget, o se esistono altri metodi\comandi per farlo..
grazie mille
ciao a tutti
output del wget è questo... (ho provato a scaricar l'index del forum eheh)
[massimo@localhost ~]$ wget http://www.gambas-it.org/smf/index.php
--2010-02-09 21:26:41-- http://www.gambas-it.org/smf/index.php
Risoluzione di www.gambas-it.org... 69.89.25.193
Connessione a www.gambas-it.org|69.89.25.193|:80... connesso.
HTTP richiesta inviata, in attesa di risposta... 200 OK
Lunghezza: non specificato [text/html]
Salvataggio in: "index.php"
[ <=> ] 39.763 53,8K/s in 0,7s
2010-02-09 21:26:44 (53,8 KB/s) - "index.php" salvato [39763]
[massimo@localhost ~]$
dove
[ <=> ] 39.763 53,8K/s in 0,7s
varia nel tempo
<=> va avanti indietro poi si ha i k scaricati (mi pare) poi la velocità e infine il tempo restante
che versione hai?
io:
wget --version
GNU Wget 1.12 compilato su linux-gnu.
+digest +ipv6 +nls +ntlm +opie +md5/openssl +https -gnutls +openssl
-iri
Wgetrc:
/etc/wgetrc (sistema)
Locale: /usr/share/locale
Compilazione: gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC="/etc/wgetrc"
-DLOCALEDIR="/usr/share/locale" -I. -I../lib -O2 -g -pipe -Wformat
-Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector --param=ssp-buffer-size=4
Collegamento: gcc -O2 -g -pipe -Wformat -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -Wl,--as-needed -Wl,--no-undefined
-Wl,-z,relro /usr/lib64/libssl.so /usr/lib64/libcrypto.so -ldl -lrt
ftp-opie.o openssl.o http-ntlm.o gen-md5.o ../lib/libgnu.a
Copyright (C) 2009 Free Software Foundation, Inc.
Licenza GPLv3+: GNU GPL versione 3 o successiva
<http://www.gnu.org/licenses/gpl.html>.
Questo è software libero: siete liberi di modificarlo e redistribuirlo.
Non c'è ALCUNA GARANZIA, negli estremi permessi dalla legge.
Scritto da Hrvoje Niksic <hniksic@xemacs.org>.
Attualmente mantenuto da Micah Cowan <micah@cowan.name>.
Inviare segnalazioni di bug e suggerimenti a <bug-wget@gnu.org>.
' Gambas class file
PUBLIC hProcess AS Process
PRIVATE comando AS String
PRIVATE stringa AS String
PUBLIC SUB Button1_Click()
comando = "wget " & TextBox1.Text
PRINT comando
stringa = ""
Label1.Text = "scaricamento in corso"
hProcess = SHELL comando FOR READ AS "hProcess" 'creazione del processo
Timer1.Start
END
PUBLIC SUB hProcess_read()
'lettura del processo
DIM sLine AS String
DIM p, p1 AS String
DIM valore AS Float
DIM sBuf AS String
'
IF Lof(hProcess) THEN
READ #hProcess, sBuf, Lof(hProcess)
sBuf
END IF
p = InStr(sBuf, "%")
p1 = InStr(sBuf, "\n", p - 5)
IF p <> 0 AND p1 <> 0 THEN
TRY valore = Val(Trim(Mid$(sBuf, p1, p - p1))) / 100
ProgressBar1.Value = valore
ENDIF
END
PUBLIC SUB Timer1_Timer()
DIM i AS Integer
i = hProcess.State
IF i = 0 THEN
Timer1.Stop
ProgressBar1.Value = 100
Label1.Text = "finito"
ELSE
ENDIF
END
questo è un esempio di codice per lettura di uno stream lanciato con shell
wget sembra cmq non rispondere a questo tipo di codice, un alternativa e avviarlo con opzione -o per cui scrive l' output su un file, poi ad ogni evento timer vai a leggere il file e la percentuale di scaricamento
solo su alcuni file... strana la cosa Scioccato
wget scrive la percentuale solo dei file di cui riesce a saper ela dimensione e quindi il tempo di scaricamento, le pagine php sono dinamiche quindi non può sapere la loro dimensione
si sono ftp...
uno dei vari esempi può esser questo...
ftp://ftp.finanze.it/pub/
wget ftp://ftp.finanze.it/pub/ct93.exe
wget non da la percentuale, ma so che occupa 274 KB...
ok allora io da shell do:
wget link/$file.zip
cat index.html | grep $file.zip | cut -d'(' -f2 | cut -d' ' -f1
e come output ricevo la dimensione in byte
che in gambas è:
SHELL "rm -fr file.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/file/" WAIT
SHELL "echo $( cat index.html | grep file.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT
e ora? come la collego alla progress bar?
[postedit]
ho partorito questo...
PUBLIC SUB Form_Open()
DIM stato AS Variant
DIM avanzamento AS Integer
DIM Valore AS Integer
DIM controllo AS Variant
DIM myprocess AS Process
WAIT
SHELL "ping -c 4 www.google.it" TO controllo
WAIT
IF Len(controllo) = 0 THEN
Message.Error("Non è presente la connessione", "exit")
installdocfa.Close()
END IF
IF NOT Exist(user.home &/ "Docfa") THEN
MKDIR (user.home &/ "Docfa")
END IF
SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT
SHELL "echo $( cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" TO avanzamento
SHELL "rm -fr index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip" WAIT
REPEAT
SHELL "ls --size | grep docfa4-1.zip | cut -d' ' -f1" TO Valore
stato = Valore / avanzamento
ProgressBar1.Value = stato
UNTIL avanzamento = Valore
END
ovviamente non funge... sicuramente errori di sintassi, ma come procedimento potrebbe andare?
come mai non mi compare la finestrella grafica?
così come è impossibile collegarci una progress bar, in alternativa puoi lanciare wget con
comando="wget ftp://ftp.finanze.it/pub/file/file.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
timer1.start
così non si blocca la gui
poi con il timer controlli se wget ha finito oppure no, se non ha finito puoi fare uno stat del file scaricato, il risultato diviso la grandezza del file ti da il valore da applicare all aprogress
PUBLIC SUB Timer1_Timer()
DIM i AS Integer
i = hProcess.State
IF i = 0 THEN
Timer1.Stop
ProgressBar1.Value = 1
Label1.Text = "finito"
ELSE
progressbar.value= Stat(pat del file scaricato)/dimensione file da scaricare
ENDIF
END
ok ho buttato giu questo.. mi da errori su
comando= "wget..........."
sicuramente sbaglio a fare i dim dei processi e variabili
' Gambas class file
PUBLIC SUB Form_Open()
DIM controllo AS Variant
DIM comando AS Process
DIM hProcess AS Process
DIM Valore AS Integer
SHELL "ping -c 4 www.google.it" TO controllo
IF Len(controllo) = 0 THEN
Message.Error("Non è presente la connessione", "exit")
installdocfa.Close()
END IF
IF NOT Exist(user.home &/ "Docfa") THEN
MKDIR (user.home &/ "Docfa")
END IF
END
PUBLIC SUB Button1_Click()
DIM controllo AS Variant
DIM comando AS Process
DIM hProcess AS Process
DIM Valore AS Integer
SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT
SHELL "echo $(cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT
SHELL "rm -fr index.html" WAIT
comando = "wget ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
timer1.start
END
PUBLIC SUB Timer1_Timer()
DIM controllo AS Variant
DIM comando AS Process
DIM hProcess AS Process
DIM Valore AS Integer
DIM i AS Integer
i = hProcess.State
IF i = 0 THEN
Timer1.Stop
ProgressBar1.Value = 1
ELSE
Valore = Stat("docfa4-1.zip") / 13500
ProgressBar1.value = Valore
ENDIF
END
il codice deve essere così:
' Gambas class file
PRIVATE hProcess AS Process
PUBLIC SUB Form_Open()
DIM controllo AS Variant
SHELL "ping -c 4 www.google.it" TO controllo
IF Len(controllo) = 0 THEN
Message.Error("Non è presente la connessione", "exit")
'installdocfa.Close()
END IF
IF NOT Exist(user.home &/ "Docfa") THEN
MKDIR (user.home &/ "Docfa")
END IF
END
PUBLIC SUB Button1_Click()
DIM comando AS String
SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT
SHELL "echo $(cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT
SHELL "rm -fr index.html" WAIT
comando = "wget ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
timer1.start
END
PUBLIC SUB Timer1_Timer()
DIM Valore AS Integer
DIM i AS Integer
i = hProcess.State
IF i = 0 THEN
Timer1.Stop
ProgressBar1.Value = 1
ELSE
Valore = Stat("docfa4-1.zip") / 13500
ProgressBar1.value = Valore
ENDIF
END
hproces è una variabile globale
però a me da errore perche wget non scarica nulla
effettivamente
comando = "wget ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
non funge... ma il wget dato da terminale cosi parte senza problemi...
a me da errore anche lanciandolo d aterminale wget:sergio@pc-sergio:~$ wget ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip
--2010-02-11 22:13:21-- ftp://ftp.finanze.it/pub/Docfa4/docfa4-1.zip
=> `docfa4-1.zip'
Risoluzione di ftp.finanze.it... 217.175.53.111
Connessione a ftp.finanze.it|217.175.53.111|:21... connesso.
Accesso come utente anonymous ... Login eseguito!
==> SYST ... fatto. ==> PWD ... fatto.
==> TYPE I ... fatto. ==> CWD /pub/Docfa4 ...
La directory "pub/Docfa4" non esiste.
sergio@pc-sergio:~$
non ci siamo ancora :sergio@pc-sergio:~$ wget http://ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip
--2010-02-11 22:22:18-- http://ftp//ftp.finanze.it/pub/docfa4/docfa4-1.zip
Risoluzione di ftp... fallito: Nome o servizio sconosciuto.
wget: impossibile risolvere l'indirizzo dell'host "ftp"
sergio@pc-sergio:~$
ok così funge perfettamente 8)
' Gambas class file
PRIVATE hProcess AS Process
PUBLIC SUB Form_Open()
DIM controllo AS Variant
SHELL "ping -c 4 www.google.it" TO controllo
IF Len(controllo) = 0 THEN
Message.Error("Non è presente la connessione", "exit")
'installdocfa.Close()
END IF
IF NOT Exist(user.home &/ "Docfa") THEN
MKDIR (user.home &/ "Docfa")
END IF
END
PUBLIC SUB Button1_Click()
DIM comando AS String
SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT
SHELL "echo $(cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT
SHELL "rm -fr index.html" WAIT
comando = "wget ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip"
'comando = "wget http://www.finanze.it/pub/Docfa4/docfa4-1.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
WAIT 5
timer1.start
END
PUBLIC SUB Timer1_Timer()
DIM Valore AS Float
DIM i AS Integer
i = hProcess.State
IF i = 0 THEN
Timer1.Stop
ProgressBar1.Value = 1
ELSE
Valore = Stat(user.Home & "/docfa4-1.zip").Size / 13500000
ProgressBar1.value = Valore
ENDIF
END
per impostare automaticamente il valore dela dimensione del file fai così:
' Gambas class file
PRIVATE hProcess AS Process
PRIVATE peso AS Integer
PUBLIC SUB Form_Open()
DIM controllo AS Variant
SHELL "ping -c 4 www.google.it" TO controllo
IF Len(controllo) = 0 THEN
Message.Error("Non è presente la connessione", "exit")
'installdocfa.Close()
END IF
IF NOT Exist(user.home &/ "Docfa") THEN
MKDIR (user.home &/ "Docfa")
END IF
END
PUBLIC SUB Button1_Click()
DIM comando AS String
DIM stringa AS String
SHELL "rm -fr docfa4-1.zip index.html" WAIT
SHELL "wget ftp://ftp.finanze.it/pub/docfa4/" WAIT
SHELL "echo $(cat index.html | grep docfa4-1.zip | cut -d'(' -f2 | cut -d' ' -f1)" WAIT TO stringa
TRY peso = Val(stringa)
SHELL "rm -fr index.html" WAIT
comando = "wget ftp://ftp.finanze.it/pub/docfa4/docfa4-1.zip"
'comando = "wget http://www.finanze.it/pub/Docfa4/docfa4-1.zip"
hProcess = SHELL comando FOR READ AS "hProcess"
'WAIT 5
timer1.start
END
PUBLIC SUB Timer1_Timer()
DIM Valore AS Float
DIM i AS Integer
i = hProcess.State
IF i = 0 THEN
Timer1.Stop
ProgressBar1.Value = 1
ELSE
TRY Valore = Stat(user.Home & "/docfa4-1.zip").Size / peso
ProgressBar1.value = Valore
ENDIF
END
Allora, ho provato a ignorare la cosa, e a riscrivere un pezzo di programma con appunto una funzione che mi serve: il download da kernel.org dei vari kernel (con relativa progress bar)
il mio codice è:
'download
PUBLIC SUB Button4_Click()
DIM comando AS String
DIM stringa AS String
IF ListBox1.Text = "" THEN
Message.Error("Nessun kernel selezionato")
ELSE
SHELL "rm -fr $HOME/lmx/kernel/*.html" WAIT
SHELL "cd $HOME/lmx/kernel/; wget http://kernel.org" WAIT
SHELL "echo $(cat $HOME/lmx/kernel/index.html.dimensioni | grep " & ListBox1.Text & ".tar.bz2 | cut -d'(' -f2 | cut -d' ' -f1)" WAIT TO stringa
TRY peso = Val(stringa)
comando = "cd $HOME/lmx/kernel/; wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-" & ListBox1.Text & ".tar.bz2"
hProcess = SHELL comando FOR READ AS "hProcess"
WAIT 5
timer1.start
ENDIF
END
'
'
'timer downlaod
PUBLIC SUB Timer1_Timer()
DIM Valore AS Float
DIM i AS Integer
i = hProcess.State
IF i = 0 THEN
Timer1.Stop
ProgressBar1.Value = 1
ELSE
TRY Valore = Stat(user.Home & "/lmx/kernel/linux-" & ListBox1.Text & ".tar.bz2 ").Size / peso
ProgressBar1.value = Valore
ENDIF
END
uno screenshot è:
(http://fendermx.altervista.org/dlkernel.png)
premessa: ho scritto uno script che scarica l'elenco dei kernel e le relative dimensioni (appurato ce funziona in modo corretto)
1- se non vengono selezionati da un errore
2- se è selezionato ricava dimensioni/nome
3- le dimensioni (in byte) finiscono in Peso
4- viene assegnato a comando la funzione shell da eseguire
5- parte lo start per il timer 1
ma purtroppo non funge, o meglio, se premo download lo scarica e mi resta 0% fino a che non lo conclude e allora passa a 100%...
come posso risolvere?
ringrazio per eventuali risposte