[PERL] Pourcentage avancement

Pourcentage avancement [PERL] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 03-03-2009 à 14:41:41    

Salut
je dois réaliser un script perl qui doit exécuter plusieurs taches assez longues en temps de traitement. Je souhaiterai donc montrer dans la console un pourcentage d'avancement. Par contre je souhaiterai que l'écran de la console ne change pas durant la mise à jour de ce pourcentage et qu'il ait une tête comme ça niveau graphique par exemple:
 
--------------------------
---Nettoyage des bases---
--------------------------
Nettoyage de la base: base1
Avancement: 36%
 
 
Vous voyez ce que je veux dire? je voudrai juste pouvoir changer les valeurs en gras. Mais je ne sais pas du tout comment faire. La recherche sur le net n'a rien donnée...  :??:  
Peut être existe-t-il aussi d'autres méthodes pour afficher ce pourcentage, une fenêtre externe?
Je prends toutes les ébauches de solutions...
 
merciiii
 
 
 
 

Reply

Marsh Posté le 03-03-2009 à 14:41:41   

Reply

Marsh Posté le 03-03-2009 à 15:11:57    

amha, ta question irait mieux sur prog qu'OSA [:cosmoschtroumpf]
sinon, en affichage "brut", tu ne peux pas changer le texte en gras si l'information est sur 2 lignes sans utiliser la librairie ncurse :non:
 
donc soit tu affiches tes informations modifiables sur une ligne avec un \r à la fin pour que ça soit réécrit automatiquement, soit tu regardes du côté de ncurses [:mrbrelle]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 03-03-2009 à 15:30:45    

merci, je ne connaissais pas le "\r" (je n'y connais pas grand chose en perl en même temps), je crois que je vais me débrouiller avec ça, je ne vais pas rajouter une autre librairie.
Merci bcp !

Reply

Marsh Posté le 03-03-2009 à 15:39:10    

Ben \r c'est pas spécifique à perl, ça fonctionne quel que soit le langage (sur un système unix, bien entendu :o).
 
C'est un caractère "carriage return", autrement dit "retour charriot". Si tu mets ça à la fin d'une ligne de texte que tu souhaites afficher, ton curseur retourne automatiquement au début de cette ligne de texte à l'écran et tu peux donc réécrire par dessus cette ligne :jap:
Pour aller à la ligne suivante (affichage classique), c'est "\n" ("line feed", retour à la ligne).


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 03-03-2009 à 15:43:25    

oui je me suis mal exprimé, je connais les \r et les \n mais je n'aurai pas eut l'idée d'utiliser \r pour cela mais c'est pas bête ! :-)

Reply

Marsh Posté le 03-03-2009 à 20:01:12    

En shell ca peux donner ca :
for i in {0..100}; do echo -en "${i}%\r"; sleep .5; done

Reply

Marsh Posté le 04-03-2009 à 09:14:36    

sputnick a écrit :

En shell ca peux donner ca :
for i in {0..100}; do echo -en "${i}%\r"; sleep .5; done


Tu veux dire en bash, je suppose :D

Reply

Marsh Posté le 04-03-2009 à 09:22:38    

non mais le monsieur demandait en perl quoi :spamafote:
et à priori, il sait se servir de \r aussi :spamafote:
bref :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 04-03-2009 à 17:38:00    

C'est pas bien dur de transposer ça en perl IMHO...

Reply

Marsh Posté le 17-03-2009 à 13:24:04    

sputnick a écrit :

En shell ca peux donner ca :
for i in {0..100}; do echo -en "${i}%\r"; sleep .5; done


 
Et comment règle t'on le temps pour qu'il soit cohérent avec le traitement que l'on fait tourner ??
 


---------------
Mon feed :D : http://forum.hardware.fr/hfr/Achat [...] 1951_1.htm
Reply

Marsh Posté le 17-03-2009 à 13:24:04   

Reply

Marsh Posté le 17-03-2009 à 17:58:12    

Ben donne un exemple de traitement :°

Reply

Marsh Posté le 17-03-2009 à 19:00:55    

Ben par exemple un transfert de fichier

Reply

Marsh Posté le 17-03-2009 à 20:59:59    

Regarde du coté de "pv"; exemple :  
find / | pv 1>/dev/null
ou alors zenity avec un truc du genre :

Code :
  1. open($progress,"| zenity --progress --auto-close --auto-kill --title="FOOBAR" --text="Transfert" ; kill -9 $$" );

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed