View previous topic :: View next topic |
Author |
Message |
Anard Apprentice
Joined: 01 Oct 2020 Posts: 240
|
Posted: Mon Sep 20, 2021 12:45 pm Post subject: zenity --progress |
|
|
Bonjour,
Je cherche à faire un script de mises à jour pour Gentoo avec un lanceur utilisant zenity --progress pour mettre à jour l'avancement.
Je dois indiquer à zenity ce qu'il doit afficher avec des Code: | echo "# texte à afficher" |
Lorsque commence la compilation, je voudrais qu'il affiche la dernière sortie de emerge quand celle-ci évolue
C'est à dire qu'il m'affiche en permanence la dernière ligne de :
Code: | # emerge -quDN @world
>>> Verifying ebuild manifests
>>> Emerging (1 of 2) media-video/vlc-3.0.16-r6::gentoo
>>> Installing (1 of 2) media-video/vlc-3.0.16-r6::gentoo
>>> Emerging (2 of 2) app-office/libreoffice-bin-7.1.5.2::gentoo
>>> Installing (2 of 2) app-office/libreoffice-bin-7.1.5.2::gentoo |
Pourriez-vous m'aider ?
upgrade-portage _________________ "iMack" : GA-H97M-D3H, Intel i7 4790, 16Go DDR3, Intel HD4600, 2x SSD 256Go, HDD 500Go+2To / Clover - macOS Mojave / Gentoo-Xfce
"Portable" : HP 350G3, HDD 500Go / rEFInd - Xubuntu 20.04 / Windows 10 |
|
Back to top |
|
|
xaviermiller Bodhisattva
Joined: 23 Jul 2004 Posts: 8722 Location: ~Brussels - Belgique
|
Posted: Mon Sep 20, 2021 1:35 pm Post subject: |
|
|
Bonjour,
Peut-être pourrais-tu lire la dernière ligne du fichier "/var/log/emerge.log" ? _________________ Kind regards,
Xavier Miller |
|
Back to top |
|
|
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Tue Sep 21, 2021 12:05 am Post subject: |
|
|
Je ne suis pas certain de comprendre la question. S’il s’agit d’afficher avec une barre de progression l’équivalent du « 1 of 2 » dans la sortie d’emerge, zenity --progress lit les pourcentages sur l’entrée standard. Tu peux t’inspirer de ce petit script Shell : https://dcc.ufmg.br/~lcerf/fr/utilitaires.html#trivialibre
En particulier de la boucle suivante, où tu pourrais remplacer « Question de $author :\n\n$question » par la partie pertinente de dernière ligne renvoyée par emerge (que tu peux écrire dans un tube nommé avec mkfifo et lire avec AWK) :
Code: | # The player is presented the question, its author, and a progress bar reaching, second after second, 100% of the delay.
for percentage in `seq $percentagePerSecond $percentagePerSecond 100`
do
sleep 1
echo $percentage
done | zenity --progress --window-icon=../token.png --title="Dans la catégorie \"$categoryName\"" --text="Question de $author :\n\n$question"
|
|
|
Back to top |
|
|
Anard Apprentice
Joined: 01 Oct 2020 Posts: 240
|
Posted: Thu Sep 23, 2021 5:36 am Post subject: |
|
|
Merci pour vos réponses.
En fait, je n'arrive pas à trouver la syntaxe pour afficher le log d'emerge dans ma fenêtre zenity tant qu'emerge est actif. J'ai essayé plusieurs choses dans ce style sans résultat pour le moment :
Code: | (
sudo -A emerge -quDN ${SET} > /tmp/upgrade-portage.log &
pid=$!
while [[ $(pidof emerge) = $pid ]]
do
sleep .5
# tail -n 1 /tmp/upgrade-portage.log | sed 's/\(.*\)/# \1/'
echo `tail -n 1 /tmp/upgrade-portage.log | sed 's/\(.*\)/# \1/'`
done
) | zenity --progress --width=500 --title "Ugrading your system" --pulsate --text "" |
J'ai l'impression que le log /var/log/emerge.log est un peu trop bavard... _________________ "iMack" : GA-H97M-D3H, Intel i7 4790, 16Go DDR3, Intel HD4600, 2x SSD 256Go, HDD 500Go+2To / Clover - macOS Mojave / Gentoo-Xfce
"Portable" : HP 350G3, HDD 500Go / rEFInd - Xubuntu 20.04 / Windows 10 |
|
Back to top |
|
|
SnowBear l33t
Joined: 03 Sep 2005 Posts: 773 Location: France - Bordeaux
|
Posted: Thu Sep 23, 2021 8:35 am Post subject: |
|
|
Anard wrote: | Merci pour vos réponses.
En fait, je n'arrive pas à trouver la syntaxe pour afficher le log d'emerge dans ma fenêtre zenity tant qu'emerge est actif. J'ai essayé plusieurs choses dans ce style sans résultat pour le moment :
Code: | (
sudo -A emerge -quDN ${SET} > /tmp/upgrade-portage.log &
pid=$!
while [[ $(pidof emerge) = $pid ]]
do
sleep .5
# tail -n 1 /tmp/upgrade-portage.log | sed 's/\(.*\)/# \1/'
echo `tail -n 1 /tmp/upgrade-portage.log | sed 's/\(.*\)/# \1/'`
done
) | zenity --progress --width=500 --title "Ugrading your system" --pulsate --text "" |
J'ai l'impression que le log /var/log/emerge.log est un peu trop bavard... |
Pour le rendre moins bavard et en fonction de ce que tu veux faire tu peux peut être rajouter un pipe grep sur ton tall ?
Du genre :
Code: |
tail -f /var/log/emerge.log | grep ">>>>"
|
|
|
Back to top |
|
|
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Thu Sep 23, 2021 10:53 am Post subject: |
|
|
Tu n'envoies pas de pourcentages sur l'entrée standard de zenity. Vois le script sur https://help.gnome.org/users/zenity/stable/progress.html pour un autre exemple, cette fois avec un message évoluant.
Aussi "echo `tail -n 1 /tmp/upgrade-portage.log | sed 's/\(.*\)/# \1/'`" est la même chose que "tail -1 /tmp/upgrade-portage.log | sed 's/^/# /'", qui est quand même plus simple. |
|
Back to top |
|
|
Anard Apprentice
Joined: 01 Oct 2020 Posts: 240
|
Posted: Thu Sep 23, 2021 4:52 pm Post subject: |
|
|
Merci.
Tu veux dire que c'est parce que je n'envoie pas de pourcentage qu'il n'affiche pas mon texte ?
Parce qu'en fait j'essayais d'abord de voir comment récupérer le log d'emerge puis de l'afficher
[EDIT]
En fait mon souci, c'est que je ne parviens pas à récupérer la sortie du terminal dans zenity :
Code: |
$ sudo emerge -vuDN @world | zenity --text-info --width 500
|
affiche la sortie correctement
Pour la progress bar, le texte doit être précédé de '#' pour être pris en compte
Code: |
$ sudo emerge -vuDN @world | sed 's/^/# /'
#
# These are the packages that would be merged, in order:
#
|
C'est bien ce que je veux.
Pourtant en l'envoyant à zenity, ça ne fonctionne pas...
Code: | # ( echo "20"; emerge -vuDN @world | sed 's/^/# /'; echo "100" ) | zenity --progress --width 500 --height 500
|
n'affiche que 'En cours d'execution' _________________ "iMack" : GA-H97M-D3H, Intel i7 4790, 16Go DDR3, Intel HD4600, 2x SSD 256Go, HDD 500Go+2To / Clover - macOS Mojave / Gentoo-Xfce
"Portable" : HP 350G3, HDD 500Go / rEFInd - Xubuntu 20.04 / Windows 10 |
|
Back to top |
|
|
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Fri Sep 24, 2021 2:13 am Post subject: |
|
|
Je ne comprends pas non plus. Voilà deux commandes ayant exactement le même effet :
Code: | $ (sleep 1; printf '10\n# 1\n'; sleep 1; printf '20\n# 2\n'; sleep 1; printf '30\n# 3\n')
$ for i in $(seq 3); do sleep 1; echo $i; done | awk '{ print 10 * $0 "\n# " $0 }' |
Pourtant, en ajoutant "| zenity --progress" à la fin de chacune des deux commandes, on obtient plus le même résultat. Dans le premier cas, Zenity montre bien 1, 2 et 3. Dans le second, seulement le 3 final. Si tu éclaircis ce mystère, fais-nous en part s’il te plaît. |
|
Back to top |
|
|
Anard Apprentice
Joined: 01 Oct 2020 Posts: 240
|
Posted: Fri Sep 24, 2021 5:09 am Post subject: |
|
|
En faisant d'autres essais, j'ai pu découvrir ceci :
Code: | emerge -pvuDN @world 2>&1 > /tmp/port.log |
(
while true; do
sleep .5;
tail -n 1 /tmp/port.log | sed 's/^/# /'
done
) | zenity --text-info --auto-kill --pulsate --width 500 |
Fonctionne : le bloc de texte affiche bien "# Calculating dependencies" toutes les demi-secondes.
En revanche, avec --progress, il a besoin de
Code: | echo `tail -n 1 /tmp/port.log | sed 's/^/# /'` | ...
Il semble que l'ajout d'un awk/sed/grep à zenity --progress le trouble, il lui faut un echo ou printf
Du coup avec ce dernier code, cela fonctionne enfin... presque
Parce que par contre j'ai le souci que rencontrent pas mal de gens apparemment : le bouton annuler ne tue pas emerge, même avec --auto-kill.
J'ai essayé ceci : Code: | #!/bin/bash
sortie () {
echo annulé
pkill emerge
exit 1
}
(
emerge -pvuDN @world 2>&1 > /tmp/port.log &
pid=$!
while true; do
sleep .5;
echo `tail -n 1 /tmp/port.log | sed 's/^/# /'`
done
) | ( zenity --progress --auto-kill --pulsate --width 500 || sortie )
exit 0 |
Et voici le retour :
Code: | # En cliquant sur le bouton annuler, je dois tuer le processus manuellement :
$ ./test.sh
./test.sh : ligne 15 : 15957 Relais brisé (pipe) ( emerge -pvuDN @world 2>&1 > /tmp/port.log & pid=$!; while true; do
sleep .5; echo `tail -n 1 /tmp/port.log | sed 's/^/# /'`;
done )
15958 Fin de la connexion (raccroché) | ( zenity --progress --auto-kill --pulsate --width 500 || sortie )
$ pkill emerge
# En revanche en cliquant sur la croix de fermeture de zenity, ça roule...
$ ./test.sh
annulé
$ |
_________________ "iMack" : GA-H97M-D3H, Intel i7 4790, 16Go DDR3, Intel HD4600, 2x SSD 256Go, HDD 500Go+2To / Clover - macOS Mojave / Gentoo-Xfce
"Portable" : HP 350G3, HDD 500Go / rEFInd - Xubuntu 20.04 / Windows 10 |
|
Back to top |
|
|
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Fri Sep 24, 2021 12:48 pm Post subject: |
|
|
Anard wrote: | Il semble que l'ajout d'un awk/sed/grep à zenity --progress le trouble, il lui faut un echo ou printf |
Oui, c'est aussi ce que j'ai observé... mais c'est quand même bien curieux.
Anard wrote: | Parce que par contre j'ai le souci que rencontrent pas mal de gens apparemment : le bouton annuler ne tue pas emerge, même avec --auto-kill. |
Essaie d'enlever --auto-kill ainsi que les autres choses apparemment inutiles (notamment les sous-shells) :
Code: | #!/bin/sh
sortie () {
echo annulé
pkill emerge
exit 1
}
emerge -pvuDN @world 2>&1 > /tmp/port.log &
while true; do
sleep .5;
echo $(sed -n '$ s/^/# /p' /tmp/port.log)
done | zenity --progress --pulsate --width 500 || sortie |
Pour sortir sans erreur, il te faudra aussi remplacer true (par pgrep emerge je suppose). |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|