Como usar uma barra de progresso zenity com cclive

4

Eu tentei usar uma barra de progresso zenity com cclive. Estou escrevendo um script para baixar arquivos de vídeos da web e quero ver a progressão do download.

Mas quando eu tento algo como

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

Mas quando executo a linha de comando, mas não parece funcionar. Alguma ideia de como posso fazer isso?

BR,

[Editar]

cclive tem esse tipo de saída:

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

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

Então, preciso enviar a última parte para o sdout, mas não sei como. Além disso e sobre pulsar, não podemos ver a progressão com esta opção, e eu realmente preciso disso ... Então eu não vou usar pulsar para este script.

pense que a pasta | zenity --progress depois dos comandos - não funcionará.

Você sabe que só é carregado no final do download.

Eu tento usar o zenity com o parâmetro --percentage e sei a melhor maneira de verificar o estado do processo.

No meu script eu sei o tamanho do arquivo.

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] 

Onde devo escrever zenity --progress --percentage=$perc

E acho que deve ser um loop, porque du -b está mudando continuamente ...

    
por Winael 06.05.2011 / 02:07

1 resposta

2

Eu não sei como o cclive funciona, mas para que zenity exiba uma barra de progresso, ele precisa enviar porcentagens para o stdout.

Veja um exemplo:

# 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 menos que você possa organizar cclive para fazer isso, você terá que se contentar com

zenity --progress --pulsate

Editar

Com base nos comentários, aqui estão algumas informações adicionais. Não posso dar uma resposta exata, pois aparentemente cclive está quebrado no Maverick. De qualquer forma, eu só recebo erros quando tento usá-lo.

A primeira coisa que você precisa fazer é obter cclive para imprimir uma porcentagem em algum lugar. Eu estou supondo que o arquivo de log irá imprimir essa porcentagem, mas não posso testá-lo. Então, você precisa analisar essa saída e enviá-la para zenity . Veja um exemplo (script não testado ou curso):

#!/bin/bash

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

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

Se a saída de cclive estiver em um formato diferente, basta ajustar o script conforme apropriado. Se cclive não despejar porcentagens no arquivo de log, tente alterar o comando cclive para:

cclive "$url" > "$tmp" &

Uma última coisa: você provavelmente não deve enviar stdout stderout ( 2>&1 ). O Zenity irá consumir stdout, mas você provavelmente não quer que ele coma todas as mensagens de erro.

Editar 2

Você pode ter que jogar awk em algum lugar no pipeline para poder isolar a porcentagem. A sintaxe básica é:

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

Durante o teste, não consegui fazer com que funcionasse corretamente, mas como não consigo fazer cclive funcionar, não consigo solucioná-lo.

    
por Scott Severance 06.05.2011 / 08:54