Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/08/2006, à 23: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 23/08/2006, à 00: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 23/08/2006, à 00: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, à 01: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, à 19: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, à 22: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, à 22: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, à 13: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, à 13:39)

Hors ligne

#7 Le 24/08/2006, à 14: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, à 14: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, à 14: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, à 22: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, à 11: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 tongue
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, à 12: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, à 13: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, à 13: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, à 13: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] wink

PS: rajoute ufraw-batch dans le titre si tu veux...

Dernière modification par gene69 (Le 25/08/2006, à 13: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, à 13: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, à 14: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, à 17:47

luron

Re : zenity --progress

coco21 a écrit :

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, à 17: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 hmm

Merci !

Dernière modification par MallaxOZ (Le 01/11/2009, à 17:14)

Hors ligne

#18 Le 01/11/2009, à 17:22

frafa

Hors ligne

#19 Le 09/11/2011, à 01: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, à 11:41)

Hors ligne

#20 Le 09/11/2011, à 18:29

luron

Re : zenity --progress

erpiu a écrit :

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, à 15:33

erpiu

Re : zenity --progress

Je viens de créer une nouvelle discussion et y ai posté le code.

Hors ligne