Pages : 1
#1 Le 22/08/2006, à 22:59
- coco21
zenity --progress
Bonsoir,
Je suis en train de me faire un petit script qui me derawtise une serie de photos depuis gqview.
Je voudrais utilisé "zenity --progress". Ça fonctionne, mais le problème, c'est si je veux arrêter le processus avec le bouton "cancel" de la fenêtre zenity, celle-ci se ferme bien, mais mon script continu de tourner.
#!/bin/sh
LISTE_FICHIER=$*
NB_PHOTOS=`echo $LISTE_FICHIER | wc -w`
POURCENTAGE=$[100/$NB_PHOTOS]
{
for FICHIER_CR2 in $LISTE_FICHIER
do
EXT=${FICHIER_CR2##*.}
ufraw-batch $FICHIER_CR2
done
} | zenity --progress --percentage="$POURCENTAGE"
Je n'arrive pas à trouver quelque chose de clair concernant le pipe avec zenity.
Si par la même vous avez un tuto (en français) pour zenity, ça serait 'achement sympa !
Hors ligne
#2 Le 22/08/2006, à 23:38
- gene69
Re : zenity --progress
zenity --progress --percentage="$POURCENTAGE" || exit 1
Est ce que ça ne résoudrait pas ton problème?
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#3 Le 22/08/2006, à 23:48
- gene69
Re : zenity --progress
essaie ceci:
function sortie(){
echo cancel
exit 1
}
{
for i in 10 20 30 40 50 70 100
do
echo "$i" | zenity --text="$i" --question ||sortie #or break but break is durty
done
}
echo succed
voilà dernier petit poil j'ai un soucis avec le --percentage mais regarde ça:
#!/bin/sh
function sortie(){
echo cancel
exit 1
}
{
for i in 10 20 30 40 50 70 100
do
echo "$i"
sleep 1
done
} | zenity --progress || sortie
echo succed
voilà pour finir...
zenity --version
2.14.3
je ne comprend pas pourquoi chez moi, au contraire l'executuion de zenity dans le 2e code arrête le script et je n'arrive pas à empecher l'écriture sur la sortie 1 ou 2 d'un message d'erreur.
...
Apres réflexion ce n'est pas zenity qui envoie ce msg mais peut être le tube...
~/Desktop$ sh test.sh
cancel # avec la croix
~/Desktop$ sh test.sh
succed #avec valider
~/Desktop$ sh test.sh
Fin de la connexion (raccroché) # avec annuler, comprend pas !
Dernière modification par gene69 (Le 23/08/2006, à 00:21)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#4 Le 23/08/2006, à 18:38
- coco21
Re : zenity --progress
merci pour tes pistes....
mais ça marche pas.
Si j'appuie sur le bouton "Cancel" ou sur la croix, ma boucle continue de tourner.
Je pense qu'il faut que je regarde du côté du pid du script.
Hors ligne
#5 Le 23/08/2006, à 21:51
- gene69
Re : zenity --progress
j'aimerai comprendre!
As tu essayé ce que je te propose? parce que chez moi ça marche niquel.
quelle version de Zenity?
edit:
je crois que je comprends ce qui se passe chez toi. rajoute des sleep/wait dans ton code: parfois bash anticipe l'execution d'une boucle, pourquoi je ne sais pas. Est ce que ça change quelquechose?
Dernière modification par gene69 (Le 23/08/2006, à 21:54)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#6 Le 24/08/2006, à 12:38
- coco21
Re : zenity --progress
version de zenity : 2.14.1
Pour ton premier code, c'est ok.
Pour le deuxième, le "echo $i" ne m'affiche rien.
Et pour mon code, même avec un "sleep 1" placé après ufraw-batch, si je clique sur cancel, mon script continu de tourner (mais plus de fenetre zenity), et ufraw-batch aussi (il prend tout les fichiers de la boucle), tant que je kill pas mon script.
En attendant, j'execute mon script avec un
xterm -e 'mon_script'
au moins quand je ferme le xterm, mon script s'arrête (et ufraw-batch).
Dernière modification par coco21 (Le 24/08/2006, à 12:39)
Hors ligne
#7 Le 24/08/2006, à 13:16
- gene69
Re : zenity --progress
Tu ne voudrais pas utiliser cette ligne de commande:
sh 'mon_script'
xterm, je n'utilise pas, je ne peux pas t'aider. je me suis fourvoyé à cause du #!/bin/sh
Dernière modification par gene69 (Le 24/08/2006, à 13:22)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#8 Le 24/08/2006, à 13:32
- gene69
Re : zenity --progress
Pour le 2e script c'est normal que ça n'affiche rien. la progress barre affiche le pourcentage envoyé dans le tube par echo "$i" . c'est simple si tu met un petit nombre entre 70 et 100 tu vas voir la progress barre revenir en arrière.
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#9 Le 24/08/2006, à 21:19
- coco21
Re : zenity --progress
Alors du coup je commence à me mélanger les pinceaux...
Pour le deuxième code, je croyais que les nombres était ceux à afficher sur le terminal et que pendant ce temps là, la barre de progression avancait !
Donc du coup, ce que je souhaite :
J'ai une serie de photos au format raw (canon) que je veux derawtiser avec ufraw-batch. Pendant que ufraw-batch travaille les photos, une barre de progression avance suivant le nombre de photos derawtisées, et que si je clique sur cancel ou que je ferme la fenêtre de progression, le processus de derawtisation s'arrête.
Je suis mal barré, ou mon code avait du bon ?
Hors ligne
#10 Le 25/08/2006, à 10:55
- gene69
Re : zenity --progress
ton code avait du bon:
Tres bonne idée de compter le nombre d'élement à convertir affin de faire une regle de 3
Tres bonne idée de faire un tube pour envoyer ta commande à la barre de progression.
Tres bonne idée de faire une boucle for en utilisant les capacité d'autocompletion du terminal.
Les defauts :
Tu utilises xterm que je connais pas
Le pourcentage d'avancement est mal géré
Je n'ai pas compris ce que tu veux faire avec les extentions.
j'essaie de faire un truc avec tes elements.
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#11 Le 25/08/2006, à 11:34
- coco21
Re : zenity --progress
xterm ,c'est juste pour voir le déroulement du script. Quand ça marchera avec zenity, je ne l'utiliserais plus.
En fait je lance le script depuis gqview, et je veux pouvoir voir l'avancement de la conversion de mes fichiers. Donc, dans les options de gqview, j'ai mis la commande : xterm -e 'mon script'
Pour les extensions, je n'avais pas fait gaffe, mais pour il ne faut pas en tenir compte (j'ai supprimé une partie d'option pour ufraw-batch pour le post et j'ai oublié d'enlevé cette ligne).
Hors ligne
#12 Le 25/08/2006, à 12:06
- gene69
Re : zenity --progress
#!/bin/sh
function sortie(){
echo "cancel"
exit 1
}
#initialisation
LISTE="$*"
QUANTITE=`echo $LISTE | wc -w`
COMPTEUR=0 # COMPTEUR pour
EXT1=".cr2" # extention du fichier en entree
EXT2=".processed" # extention du fichier de sortie
# on peut enlever la ligne suivante,
# ainsi que toutes les lignes utilisant la variable $TMP
TMP="/tmp/script-ufraw-batch-$(date +%s)"
for FICHIER in $LISTE
do
# tentative perso
ufraw-batch --output=${FICHIER/%"$EXT1"/"%EXT2"} $FICHIER
# ecrire les noms des fichiers dans un fichier (inutile)
echo "$FICHIER -> ${FICHIER/%${EXT1}/${EXT2}}" >> $TMP
# faire le calcul du pourcentage, puis envoyer le résultat dans le tube.
COMPTEUR=$((COMPTEUR + 100))
echo $((COMPTEUR / QUANTITE))
done | zenity --progress || sortie
echo "fin de la conversion"
# afficher les fichiers, puis effacer le fichier temporaire.
cat $TMP
rm --preserve-root $TMP
#fin
exit 0
héhéhé reste à ajuster les options de conversions
$ ufraw --help
*UFRaw 0.6 - Unidentified Flying Raw converter for digital camera images.Usage: ufraw [ options ... ] [ raw-image-files ... ]
ufraw-batch [ options ... ] [ raw-image-files ... ]
ufraw [ options ... ] [ default-directory ]By default 'ufraw' displays a preview window for each raw image allowing
the user to tweak the image parameters before saving. If no raw images
are given at the command line, UFRaw will display a file chooser dialog.
To process the images with no questions asked (and no preview) use
'ufraw-batch'.The input files can be either raw images or ufraw's ID files. ID file
contain a raw image filename and the parameters for handling the image.
One can also use and ID file with the option:--conf=ID-file Apply the parameters in ID-file to other raw images.
The rest of the options are separated into two groups.
The options which are related to the image manipulation are:--wb=camera|auto White balance setting.
--temperature=TEMP Color temperature in Kelvins (2000 - 7000).
--green=GREEN Green color normalization.
--curve=manual|linear|camera|CURVE
Type of tone curve to use. CURVE can be any curve
that was previously loaded in the GUI.
(default camera if such exsists, linear otherwise).
--curve-file=file Use tone curve included in specified file.
Overrides --curve option
--[un]clip Unclip [clip] highlights (default clip).
--gamma=GAMMA Gamma adjustment of the base curve (default 0.45).
--linearity=LINEARITY Linearity of the base curve (default 0.10).
--saturation=SAT Saturation adjustment (default 1.0, 0 for B&W output).
--exposure=auto|EXPOSURE
Auto exposure or exposure correction in EV (default 0).
--black-point=auto|BLACK
Auto black-point or black-point value (default 0).
--interpolation=ahd|vng|four-color|bilinear
Interpolation algorithm to use (default ahd).The options which are related to the final output are:
--shrink=FACTOR Shrink the image by FACTOR (default 1).
--size=SIZE Downsize max(height,width) to SIZE.
--out-type=ppm8|ppm16|tiff8|tiff16|jpeg
Output file format (default ppm8).
--create-id=no|also|only
Create no|also|only ID file (default no).
--compression=VALUE JPEG compression (0-100, default 85).
--[no]exif Embed exif in output JPEG (default embed exif).
--[no]zip Enable [disable] TIFF zip compression (default nozip).
--out-path=PATH PATH for output file (default use input file's path).
--output=FILE Output file name, use '-' to output to stdout.
--overwrite Overwrite existing files without asking (default no).UFRaw first reads the setting from the resource file $HOME/.ufrawrc.
Then, if an ID file is specified it setting are read. Next, the setting from
the --conf option are taken, ignoring input/output filenames in the ID file.
Lastly, the options from the command line are set. In batch mode, the second
group of options is NOT read from the resource file.Last, but not least, --version displays the version number and compilation
options for ufraw and --help displays this help message and exits.
Dernière modification par gene69 (Le 25/08/2006, à 12:18)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#13 Le 25/08/2006, à 12:10
- gene69
Re : zenity --progress
la seule ligne que je n'ai pas testé c'est le ufraw-batch j'ai pas d'image .cr2 sous la main et je ne sais pas comment tu veux convertir.
Voilà bientot [RESOLU]
PS: rajoute ufraw-batch dans le titre si tu veux...
Dernière modification par gene69 (Le 25/08/2006, à 12:15)
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#14 Le 25/08/2006, à 12:55
- coco21
Re : zenity --progress
Ben, non, toujours pareil !
Si j'appuie sur le bouton "Cancel" de la fenêtre zenity, j'ai toujours le message :
"Fin de la connexion (raccroché)"
et ufraw-batch continu de tourner, alors que je voudrais qu'il s'arrête lorsque je ferme la fenêtre zenity (soit par le bouton cancel, soit par la croix).
Pour les options de ufraw-batch, je les avais, j'ai juste simplifié pour le post.
En fait le problème est le même avec xine si tu veux lire toutes les vidéos d'un répertoire, par exemple. Si tu ferme la fenetre de progression, xine ne va pas s'arrêter, alors que c'est ce que je cherche à faire.
Je suis plus clair ?
Hors ligne
#15 Le 25/08/2006, à 13:59
- gene69
Re : zenity --progress
je n'arrive pas à reproduire ton bug. Lorsque je cliques sur la croix alors ça ferme Zenity sans fermer ufraw sinon lorsque je cliques sur annuler ça ferme tout en affichant le fameux "racroché" qui m'embete un peux mais bon pas tant que ça. en executant avec sh lorsque je clique sur annuler je te garanti que je récupère la main. Avec 1 ou plusieurs fichiers.
Comme je l'ai déjà dit j'ai pas d'images cr2 ni tes options pour tester le fonctionnement du trucs exactement dans tes conditions.
Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion
Hors ligne
#16 Le 07/01/2009, à 16:47
- luron
Re : zenity --progress
Ben, non, toujours pareil !
Si j'appuie sur le bouton "Cancel" de la fenêtre zenity, j'ai toujours le message :
"Fin de la connexion (raccroché)"
et ufraw-batch continu de tourner, alors que je voudrais qu'il s'arrête lorsque je ferme la fenêtre zenity (soit par le bouton cancel, soit par la croix).
Je confirme. Les processus enfants ne sont pas fermés.
Hors ligne
#17 Le 01/11/2009, à 16:13
- MallaxOZ
Re : zenity --progress
Je déterre ce topic pour savoir si une solution a été trouvée ?
Je me suis fait un script pour encoder des fichiers en mp4 avec mencoder, que j'appelle en cliquant droit sur le fichier avec un nautilus-script. N'ayant donc pas de terminal, j'utilise zenity. Mais pareil le processus n'est pas fermé : quand je clique sur cancel il ne se passe rien, et quand je clique sur la croix, ca ferme zenity, mais pas mencoder.
J'ai essayé de rajouter || exit 1, sans succès. Je l'ai lancé à travers un terminal pour voir, et j'obtiens juste un "Fin de la connexion (raccroché)" quand j'annule
Merci !
Dernière modification par MallaxOZ (Le 01/11/2009, à 16:14)
Hors ligne
#18 Le 01/11/2009, à 16:22
- frafa
Re : zenity --progress
man zenity
--auto-kill
Kill parent process if cancel button is pressed
Hors ligne
#19 Le 09/11/2011, à 00:55
- erpiu
Re : zenity --progress
A mon tour de déterrer ce vieux topic qui n'a pas l'air de disposer de solution.
Je me suis trouvé récemment dans la même situation que coco21, à savoir l'impossibilité de mettre fin, via le bouton "Annuler", à un script "action" lancé schématiquement comme suit :
action | zenity --progress...
Après un examen détaillé du problème, voici ce que j'ai compris de ce qui se passe en réalité.
1- Cliquer sur le bouton "Annuler" provoque tout simplement la fin du processus exécutant zenity, avec un exit code non nul mais rien de plus. Le processus exécutant "action" n'est impacté que s'il cherche à écrire sur le pipe : il se trouve alors devant un "relais brisé" (il n'y plus de processus pour lire les données écrite sur le pipe) et il reçoit alors le signal SIGPIPE dont le traitement standard consiste à arrêter le processus.
Donc, si "action" n'écrit pas ou plus sur le pipe, il peut continuer à tourner sans aucun problème et "Annuler" n'annule rien!
2- Pour résoudre le problème, on peut penser utiliser l'option auto-kill de zenity :
action | zenity --progress --auto-kill ...
Mais cela ne fonctionne pas mieux, du moins dans la plupart des cas.
En effet, avec l'option --auto-kill, un clic sur "Annuler" provoque en réalité l'envoi du signal SIGHUP au processus père de zenity, c'est-à-dire au shell qui a lancé la commande ci-dessus. Le traitement standard de ce signal consiste à mettre fin à ce processus shell et, si ce shell est un shell interactif et uniquement dans ce cas, à envoyer le même signal SIGHUP à ses processus fils. Ainsi, le processus exécutant "action" ne recevra le signal SIGHUP que si la commande ci-dessus est directement émise par un shell interactif. Or, la plupart du temps, une telle commande se trouve au beau milieu d'un script et le processus "action" continuera sans problème : son père est mort (le shell), son frère aussi (zenity), il se retrouve rattaché au processus init de pid 1 et continue sa route, sans problème!
3- Et si l'on cherchait à récupérer ce signal SIGHUP pour faire ce que l'on souhaite? On peut penser écrire quelque chose du type ;
trap do_on_sighup HUP
action | zenity --progress --auto-kill ...
Mais là encore, problème! Lorsque le signal SIGHUP est envoyé au processus shell père de zenity, ce shell en prend note mais ne peut exécuter immédiatement la séquence do_on_hup. En effet, dans le shell, toute commande (sauf wait) est considérée comme in-interruptible (et c'est tout à fait normal pour un interpréteur de commande). Lorsque le shell reçoit SIGHUP, la commande en cours est "action | zenity --progress..." : ce n'est donc que lorsque cette commande sera terminée que le shell lancera l'exécution de do_on_hup.
En d'autres termes, pour tuer "action", il faut attendre que "action" soit terminé!!! Gag!
3- Pour traiter le problème, il serait préférable, lors d'un clic sur "Annuler", d'en informer directement le processus exécutant "action", à charge pour celui-ci de s'arrêter le plus proprement possible. C'est une solution de ce type que je suis en train d'implanter sous la forme d'une procédure (shell) chargée de:
- lancer dans un processus A une action donnée en paramètre,
- lancer dans un second processus Z un zenity --progress...
- fournir un canal de communication entre ces deux processus (un fifo) permettant de mettre à jour la boîte de dialogue
- avertir A, via un signal (SIGUSR1), dès que le bouton "Annuler" de la fenêtre zenity est cliqué.
Cette procédure, appelée start_and_monitor, permet de spécifier des paramètres de la fenêtre zenity à créer, l'action à lancer et les éventuels paramètres de cette action. Un exemple d'utilisation est :
start_and_monitor --width=400 --title="Transfert de données" --pulsate transfert_file MonDossier
Je mets actuellement la dernière main à cette procédure. Dès que c'est prêt, si certains d'entre vous sont intéressés, je poste le code.
A suivre....
Dernière modification par erpiu (Le 09/11/2011, à 10:41)
Hors ligne
#20 Le 09/11/2011, à 17:29
- luron
Re : zenity --progress
Je mets actuellement la dernière main à cette procédure. Dès que c'est prêt, si certains d'entre vous sont intéressés, je poste le code.
A suivre....
Oui, ça serait intéressant que tu postes le code.
Hors ligne
#21 Le 10/11/2011, à 14:33
- erpiu
Re : zenity --progress
Je viens de créer une nouvelle discussion et y ai posté le code.
Hors ligne
Pages : 1