Résolu le 25-12-18 zenity vs DIALOG, portabilité et affichage d'un résultat

Postez ici vos scripts Bash, Python, etc.
Verrouillé
Avatar du membre
tioker
Messages : 980
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

zenity vs DIALOG, portabilité et affichage d'un résultat

Message 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.
Modifié en dernier par arghlub le mar. 25 déc. 2018 10:46, modifié 2 fois.
Raison : ajout de l'attribut "résolu"
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

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

;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
tioker
Messages : 980
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message 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).
Image

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 :l
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message par arghlub »

Super ton projet de programme ...
ou «comment faire évoluer les anciennes technologies tout en les préservant» 8-)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message 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 :

Code : Tout sélectionner

variable=`commande`
est (presque) dépréciée à la faveur de :

Code : Tout sélectionner

variable=$(commande)
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 ;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
tioker
Messages : 980
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message 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
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

Avatar du membre
serged
Messages : 823
Enregistré le : jeu. 16 juil. 2015 07:59
Localisation : Montrouge (France)

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message 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...).
LinuxMint Virginia Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message 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.
;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
tioker
Messages : 980
Enregistré le : sam. 6 mai 2017 00:33
Localisation : Anjou...Feu !
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message 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
Image
Et si je mets cette illustration dialog de gestion de calendrier... le qualificatif "non graphique" ne saute pas aux yeux...
Image
Mais aujourd'hui le mode texte, hors quelques applications embarquées, doit paraître un peu désuet.
Merci serged pour cette contribution.
Cdlt
HP Victus 16: Mint 21.3 Cinnamon 6,0,4 + Windows 11 - Ryzen 5 5600H - NVIDIA GeForce GTX 1650 - Mem 16Go - SSD 512Go
pCloud Synchronisation en temps réel des 4 dossiers personnels

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: zenity vs DIALOG, portabilité et affichage d'un résultat

Message par arghlub »

Sujet déplacé et verrouillé. ;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Verrouillé