Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
zenity --progress
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
Anard
Apprentice
Apprentice


Joined: 01 Oct 2020
Posts: 242

PostPosted: Mon Sep 20, 2021 12:45 pm    Post subject: zenity --progress Reply with quote

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, Sapphire RX570 4Go, 2x SSD 256Go, HDD 500Go + Zpool 3x2To / Clover - macOS Mojave / Gentoo-Xfce
Back to top
View user's profile Send private message
xaviermiller
Bodhisattva
Bodhisattva


Joined: 23 Jul 2004
Posts: 8723
Location: ~Brussels - Belgique

PostPosted: Mon Sep 20, 2021 1:35 pm    Post subject: Reply with quote

Bonjour,

Peut-être pourrais-tu lire la dernière ligne du fichier "/var/log/emerge.log" ?
_________________
Kind regards,
Xavier Miller
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1912
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Tue Sep 21, 2021 12:05 am    Post subject: Reply with quote

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
View user's profile Send private message
Anard
Apprentice
Apprentice


Joined: 01 Oct 2020
Posts: 242

PostPosted: Thu Sep 23, 2021 5:36 am    Post subject: Reply with quote

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, Sapphire RX570 4Go, 2x SSD 256Go, HDD 500Go + Zpool 3x2To / Clover - macOS Mojave / Gentoo-Xfce
Back to top
View user's profile Send private message
SnowBear
l33t
l33t


Joined: 03 Sep 2005
Posts: 773
Location: France - Bordeaux

PostPosted: Thu Sep 23, 2021 8:35 am    Post subject: Reply with quote

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
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1912
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Thu Sep 23, 2021 10:53 am    Post subject: Reply with quote

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
View user's profile Send private message
Anard
Apprentice
Apprentice


Joined: 01 Oct 2020
Posts: 242

PostPosted: Thu Sep 23, 2021 4:52 pm    Post subject: Reply with quote

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, Sapphire RX570 4Go, 2x SSD 256Go, HDD 500Go + Zpool 3x2To / Clover - macOS Mojave / Gentoo-Xfce
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1912
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Fri Sep 24, 2021 2:13 am    Post subject: Reply with quote

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
View user's profile Send private message
Anard
Apprentice
Apprentice


Joined: 01 Oct 2020
Posts: 242

PostPosted: Fri Sep 24, 2021 5:09 am    Post subject: Reply with quote

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 :P
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, Sapphire RX570 4Go, 2x SSD 256Go, HDD 500Go + Zpool 3x2To / Clover - macOS Mojave / Gentoo-Xfce
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1912
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Fri Sep 24, 2021 12:48 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
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