web-dev-qa-db-fra.com

Comment utiliser une barre de progression zenity avec cclive

J'ai essayé d'utiliser une barre de progression zenity avec cclive. J'écris un script pour télécharger des fichiers de vidéos Web et je veux voir la progression du téléchargement.

Mais quand j'essaie quelque chose comme

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

Mais quand j'exécute la ligne de commande mais cela ne semble pas fonctionner. Une idée de comment je peux faire ça?

BR,

[Modifier]

cclive a ce genre de sortie:

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

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

Il me faut donc envoyer la dernière partie à sdout mais je ne sais pas comment. Sinon et à propos de pulser, nous ne pouvons pas voir la progression avec cette option, et j’en ai vraiment besoin ... Donc, je n’utiliserai pas pulsate pour ce script.


pense que le collage | zenity --progress après les commandes - ne fonctionnera pas.

Vous savez qu'il est chargé uniquement à la fin du téléchargement.

J'essaie d'utiliser zenity avec le paramètre --percentage, et je connais le meilleur moyen de vérifier l'état du processus.

Dans mon script, je connais la taille du fichier.

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] 

Où devrais-je écrire zenity --progress --percentage=$perc

ET je pense que cela devrait être une boucle, parce que du -b change continuellement ...

4
Winael

Je ne sais pas comment fonctionne cclive, mais pour que zenity affiche une barre de progression, il faut envoyer les pourcentages à stdout.

Voici un exemple:

# 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

À moins que vous ne puissiez vous arranger pour que cclive le fasse, vous devrez vous contenter de

zenity --progress --pulsate

Modifier

Sur la base des commentaires, voici quelques informations supplémentaires. Je ne peux pas vous donner une réponse exacte car apparemment cclive est cassé sur Maverick. En tout cas, je ne reçois des erreurs que lorsque je tente de l'utiliser.

La première chose à faire est d'obtenir cclive pour imprimer un pourcentage quelque part. Je suppose que le fichier journal imprimera un tel pourcentage, mais je ne peux pas le tester. Ensuite, vous devez analyser cette sortie et l'envoyer à zenity. Voici un exemple de script (non testé ou cours):

#!/bin/bash

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

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

Si la sortie de cclive est dans un format différent, ajustez simplement le script comme il convient. Si cclive ne sauvegarde pas les pourcentages dans le fichier journal, essayez de remplacer la commande cclive par:

cclive "$url" > "$tmp" &

Une dernière chose: vous ne devriez probablement pas envoyer stderr out stdout (2>&1). Zenity consomme stdout, mais vous ne voulez probablement pas qu'il mange tous les messages d'erreur.

Modifier 2

Vous devrez peut-être ajouter awk quelque part dans le pipeline pour pouvoir isoler le pourcentage. La syntaxe de base est la suivante:

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

Lors des tests, je ne pouvais pas le faire fonctionner correctement, mais comme je ne peux pas faire fonctionner cclive, je ne peux pas vraiment le résoudre.

2
Scott Severance