Page 1 sur 1
zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : jeu. 29 mars 2018 10:46
par tioker
Bonjour,
J'avance dans mes connaissances du scripting et je développe quelques interfaces et procédures pour des associations ou utilisateurs particuliers.
Je voulais me mettre au Python mais quand je vois la puissance du shell ...
J'ai découvert (et utilisé) la commande zenity qui permet de faire de belles boites de dialogue et je viens de tomber sur DIALOG qui a l'air de faire un peu la même chose. C'est quand même beaucoup plus joli qu'un vulgaire (excuses) "echo".
Code : Tout sélectionner
# exemple avec zenity. Tapez cette commande dans une fenêtre terminal
Folder=`zenity --title "Répertoires" --text "Choisissez un répertoire" --file-selection --directory`
Code : Tout sélectionner
# exemple avec DIALOG. Tapez les deux lignes
DIALOG=${DIALOG=gdialog}
$DIALOG --title " Mon premier dialog" --clear --yesno "Bonjour, ceci est mon premier programme dialog" 10 30
On peut lire avec intérêt
ce post sur DIALOG et
celui-ci sur zenity.
Maintenant j'en viens à mes questions:
- quelle est la portabilité de ces deux commandes dans le monde Linux? Sont-ce des commandes toujours intégrées dans l'OS ou doit-on faire attention ? J'utilise la commande zenity sur un Raspberry sans soucis. Quid des autres, et surtout des options DIALOG (dialog/xdialog/gdialog/kdialog) ?
- je ne me suis pas approfondi mais quelles différences notables entre
zenity et
DIALOG ?
- enfin et surtout, peut-on utiliser ces fonctions ou
en existe-t-il une équivalente pour présenter des résultats. Je m'explique: je recherche les 10 plus gros fichiers d'un répertoire; je veux les afficher; une commande zenity me permet de choisir le répertoire à scruter mais comment présenter proprement le résultat ?
J'espère que ce post intéressera quelques curieux/experts/spécialistes.
Dans l'attente. Vive le shell !!!
ps: je suis conscient que le shell (scripting Linux) et python (portabilité) n'ont pas la même finalité. Mais je m'y mettrai plus tard.
Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : jeu. 29 mars 2018 11:57
par arghlub
Salut tioker
Je ne connais guère Dialog, donc je ne pourrais comparer avec Zenity.
Ceci dit, tu as aussi YAD (un fork de Zenity un peu plus évolué) :
https://doc.ubuntu-fr.org/yad_yet_another_dialog
─────────────────────
tioker a écrit :
- quelle est la portabilité de ces deux commandes dans le monde Linux? Sont-ce des commandes toujours intégrées dans l'OS ou doit-on faire attention ?
Oui il faut faire attention car zenity n'est pas installé par défaut sur toutes les distributions.
Il suffit qu'en début de script, tu regardes si l'utilisateur dispose de zenity, et sinon l'installer avec par exemple une petite condition :
Code : Tout sélectionner
dpkg -l | grep -qw zenity
if [ $? = 0 ] # teste si la dernière commande a renvoyée une sortie 0
then
echo "Zenity déjà installé"
else
echo "installation de Zenity"
sudo apt install zenity
fi
─────────────────────
tioker a écrit :
- enfin et surtout, peut-on utiliser ces fonctions ou en existe-t-il une équivalente pour présenter des résultats. Je m'explique: je recherche les 10 plus gros fichiers d'un répertoire; je veux les afficher; une commande zenity me permet de choisir le répertoire à scruter mais comment présenter proprement le résultat ?
Oui bien sûr que c'est possible.
Voici un exemple de script bash tout simple que je viens de créer.... Ce n'est qu'une piste de départ
(je te laisse réfléchir pour la suite, c'est pas bien compliqué
)
Code : Tout sélectionner
#!/bin/bash
# Lister les 10 plus gros fichiers du répertoire actuel dans Zenity
# Script de base pouvant/devant être grandement amélioré
# Verification de la présence de Zenity sur le système (sinon installation)
dpkg -l | grep -qw zenity
if [ $? != 0 ]; then echo "installation de Zenity"; sudo apt install zenity; fi
# variable pour le résultat d'un tri sur ls
listeRep=$(find . -type f -ls | sort -k 7 -r -n | head -10 | awk '{printf "%7d\t\t%-35s\n", $7 , $11}')
# et le fameux Zenity (qui ne fait qu'afficher la variable listeRep)
zenity --info --text "<b><u>Liste des 10 plus gros fichiers du répertoire actuel :</u></b>\n\n$listeRep"
Donc pour ce que tu veux faire, il suffit de faire une première boîte de dialogue pour connaître le répertoire à lister (et placer sa valeur dans une variable).
Puis lancer un «ls $repertoireChoisi», le passer dans un filtre et envoyer le résultat dans une autre boîte zenity.

Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : jeu. 29 mars 2018 12:22
par tioker
Bonjour arghlub,
Si j'avais eu à parier une roupie cinghalaise
(1) sur la personne qui allait pouvoir me répondre, j'aurai parié sur toi.
Ta réponse me convient car elle montre que
zenity peut ainsi avoir un dialogue de saisie de variable et de présentation de résultat.
Je pense avoir fait une erreur en disant que zenity était intégré à la version Raspbian du Raspberry; j'ai du l'installer avec imageMagick. Donc ton test de disponibilité de fonction (applicable à beaucoup de choses) me sera sûrement utile.
Je vais de ce pas (ou un peu plus tard) tester ces fonctionnalités.
Pour information,
mon programme associatif permet de saisir des références de lieux sur le clavier numérique d'une maquette afin que les leds du lieux s'illuminent et que le diaporama d'époque s'affiche sur un écran. Je ne fais que la partie Raspberry dans laquelle j'ai des procédures pour générer l'index, mettre les photos au bon format et générer le fichier lanceur (.desktop) sur le bureau. La maquette est grand public, il faut la préserver: y'a qu'une souris (lancement) et un clavier numérique (saisie).
Voilà, j'espère que je ne vous ai pas gavé avec mes histoires....
Je laisse le post ouvert le temps (pas trop longtemps) que d'autres contribuent.
Merci encore.
(1)Je ne suis ni joueur ni dépensier, j'ai pas trouvé monnaie moins chère

Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : jeu. 29 mars 2018 12:32
par arghlub
Super ton projet de programme ...
ou «comment faire évoluer les anciennes technologies tout en les préservant»

Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : jeu. 29 mars 2018 13:29
par arghlub
Re,
Un petit truc qui n'a rien à voir avec zenity mais je viens de m'apercevoir que tu utilisais les guillemets inversés (`) pour assigner le retour d'une commande à une variable :
tioker a écrit :
Code : Tout sélectionner
Folder=`zenity --title "Répertoires" --text "Choisissez un répertoire" --file-selection --directory`
Hors cette notation :
est (presque) dépréciée à la faveur de :
qui permet notamment d'imbriquer des commandes par exemple :
Code : Tout sélectionner
maVariable=$(echo "Noyau utilisé : $(uname -r)") # exemple d'imbrication de commandes dans une variable
echo $maVariable
Fin de la petite digression

Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : ven. 30 mars 2018 18:11
par tioker
Mes remarques puisque je vais clore le sujet:
- zenity est une ré-écriture de gdialog.
- dialog, en standard, est beaucoup plus rustique
- pour avoir essayé les deux, je trouve zenity plus facile à utiliser.
- quant à la pérennité ... dialog ne semble pas avoir bougé depuis 2010, zenity depuis 2013 ... mais je n'ai aucune assurance !
- avec les recommandations d'Arghlub je suis arrivé à la fin de mon test, et avec toutes les options qu'il y a (calendar, scale, texte, progression...)
Je mets le sujet à Résolu.
Cdlt
Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : ven. 30 mars 2018 19:07
par serged
Déjà la différence fondamentale : dialog fonctionne en mode texte (avec la bibliothèque ncurses) et zenity (et yad) en mode graphique (GTK+).
Donc ça dépend dans quoi tu veux l'utiliser (en mode graphique ou texte...). Quant à yad, c'est un fork de zenity et doit donc être moins présent que zenity: Il n'est pas installé par défaut dans LinuxMint (enfin, je crois...).
Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : ven. 30 mars 2018 19:11
par arghlub
serged a écrit :Quant à yad, c'est un fork de zenity et doit donc être moins présent que zenity: Il n'est pas installé par défaut dans LinuxMint (enfin, je crois...).
D'où l'intérêt de vérifier en début de script et d'y pallier au cas où avec 2 lignes (adaptables selon les paquets que l'on veut avoir présents) :
Code : Tout sélectionner
# Verification de la présence de Yad sur le système (sinon installation)
dpkg -l | grep -qw yad
if [ $? != 0 ]; then echo "installation de YAD"; sudo apt-get install yad; fi
et on peut le désinstaller en fin de script, s'il n'était pas présent au départ.

Re: zenity vs DIALOG, portabilité et affichage d'un résultat
Posté : ven. 30 mars 2018 21:30
par tioker
serged a écrit :Déjà la différence fondamentale : dialog fonctionne en mode texte (avec la bibliothèque ncurses) et zenity (et yad) en mode graphique (GTK+).
Dialog en haut, gdialog en bas

Et si je mets cette illustration dialog de gestion de calendrier... le qualificatif "non graphique" ne saute pas aux yeux...

Mais aujourd'hui le mode texte, hors quelques applications embarquées, doit paraître un peu désuet.
Merci
serged pour cette contribution.
Cdlt