Come utilizzare una barra di avanzamento di zenity con cclive

4

Ho provato ad usare una barra di avanzamento di zenity con cclive. Sto scrivendo uno script per scaricare file video web e voglio vedere la progressione del download.

Ma quando provo qualcosa come

$cclive <url> 2>&1 | zenity --progress

Ma quando eseguo la riga di comando ma non sembra funzionare. Qualche idea su come posso farlo?

BR,

[Modifica]

cclive ha questo tipo di output:

cclive http://www.youtube.com/watch?v=youtubevideo

Checking ... .......... ..........done.
youtubevideo.flv 2.5M 75.8K/s 00:09:29 5% 

Quindi ho bisogno di inviare l'ultima parte a sdout ma non so come. Altrimenti e pulsa, non possiamo vedere la progressione con questa opzione, e ne ho davvero bisogno ... Quindi non userò pulsate per questo script.

pensa che l'incolla | zenity --progress dopo i comandi - non funzionerà.

Sai che è stato caricato solo alla fine del download.

Cerco di utilizzare zenity con il parametro --percentage e conosco il modo migliore per verificare lo stato del processo.

Nel mio script conosco le dimensioni del file.

size_t=$theoretical_size_of file     # I don't know where are from you take FULL size     of your file. I know it in myself script.
size_r='du -b /tmp/$filename'
perc=$[$size_t/$size_r*100] 

Dove dovrei scrivere zenity --progress --percentage=$perc

E penso che dovrebbe essere un ciclo, perché du -b sta cambiando continuamente ...

    
posta Winael 06.05.2011 - 02:07

1 risposta

2

Non so come funzioni cclive , ma per fare in modo che% co_de mostri una barra di avanzamento, è necessario inviare percentuali allo stdout.

Ecco un esempio:

# This works:
(for i in $(seq 0 3 100); do echo "$i"; sleep 0.1; done) | zenity --progress

# This doesn't:
(for i in $(seq 0 3 100); do echo "hi"; sleep 0.1; done) | zenity --progress

A meno che tu non possa organizzare zenity per farlo, dovrai accontentarti

zenity --progress --pulsate

Modifica

In base ai commenti, ecco alcune informazioni aggiuntive. Non posso darti una risposta esatta poiché apparentemente cclive è stato rotto su Maverick. Ad ogni modo, ottengo solo errori quando provo ad usarlo.

La prima cosa che devi fare è ottenere cclive per stampare una percentuale da qualche parte. Suppongo che il file di registro stamperà una percentuale tale, ma non posso testarlo. Quindi, devi analizzare questo output e inviarlo a cclive . Ecco un esempio di script (non testato o corso):

#!/bin/bash

url="$1"
tmp="/tmp/cclive.log"

mkfifo "$tmp"
cclive --background --logfile="$tmp" "$url"
egrep '[0-9]+%$' < "$tmp" | zenity --progress
rm "$tmp"

Se l'output di zenity è in un formato diverso, basta regolare lo script in modo appropriato. Se cclive non esegue il dump delle percentuali nel file di log, prova a cambiare il comando cclive in:

cclive "$url" > "$tmp" &

Un'ultima cosa: probabilmente non dovresti inviare stderr out stdout ( cclive ). Lo Zenity consumerà lo stdout, ma probabilmente non vuoi che mangi tutti i messaggi di errore.

Modifica 2

Potrebbe essere necessario lanciare 2>&1 da qualche parte nella pipeline in modo da poter isolare la percentuale. La sintassi di base è:

awk '{print $1}' # change $1 to the correct space-separated field

Durante i test, non riuscivo a farlo funzionare correttamente, ma poiché non riesco a far funzionare awk , non posso davvero risolverlo.

    
risposta data Scott Severance 06.05.2011 - 08:54

Leggi altre domande sui tag