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 ...
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
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.
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.