IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Comment afficher un statut puis le rafraîchir en ksh ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Comment afficher un statut puis le rafraîchir en ksh ?
    Bonjour,

    Voilà j'ai un petit problème.

    Je suis sur un programme qui permet de lancer des job. Une fois que le job est lancé via la commande qstat je peux voir l'état de mon job.

    Sauf que moi mon script va permettre d’afficher uniquement le job qui m’intéresse, c'est à dire celui qui a été lancé via le script et non pas ceux de tout les utilisateurs.

    alors jusqu'ici pas de problème j'ai réussi à me débrouiller et ça marche.

    Mon soucis vient au niveau de ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    ID_JOB=$(qsub $JOB_NAME_FILE | cut -f1 -d.)
    STATUS=$(qstat | grep "$ID_JOB.master" | awk '{print $5}')
     
    if [ $STATUS = "Q" ]
    then
              echo "Status job : Waiting ..."[/INDENT]
    fi
     
    if [ $STATUS = "R" ]
    then
              echo "Status job : Running ..."
    fi
     
    if [ $STATUS = "E" ]
    then
              echo "Status job : Finished ..."[/INDENT]
    fi
    Dans cette configuration là, l'affichage est unique c'est à dire qu'une fois affiché le status du job n'est plus mit à jour.

    j'imagine que dans un premier temps faudrait mettre une boucle while pour évaluer la valeur du status et ainsi mettre à jour sa valeur, j'y ai pensé je vous rassure, mais comment faire pour que tant que l'on se trouve dans cette boucle While, l'affichage du status puisse changer en passant par exemple de Waiting à Running et enfin Finished sans que ce ne soit écrit une ligne en dessous mais en rafraîchissant la valeurs de la variable $STATUS et ainsi la faire passé de Waiting à Running etc.... au même endroit de l'écran

    Je ne sais pas si j'ai été bien clair , mais pour donner un exemple, prenez le cas d'un pourcentage qui s'afficherai à l'écran et qui évoluerai de 0% à 100% de manière dynamique mais statique dans l'espace (le changement de la valeur du pourcentage se fait au même endroit sur l'écran).

    Une idée ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    [...]comment faire pour que tant que l'on se trouve dans cette boucle While, l'affichage du status puisse changer [...]
    tu exécutes qstat dans la boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IDJOB=$(qsub ...)
    while true
    do
       case $(qstat ...| awk -v idJob="$IDJOB" '{if ($0".master" ~ idJob)print $5}') in
          Q) echo ...;;
          R) echo ...;;
          E) echo ...;;
       esac
    done
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Oui sur ça pas de problème. en fait j'ai vue sur des exemples de barres de progressions en ksh au lieu de echo ils utilisaient printf.

    Mon souci n'est pas vraiment la boucle, mais plutôt la manière d'afficher à l'écran l'état du status.

    regardez l'exemple via ce lien progressbar où l'on voit l'évolution des pourcentages. Je veux que la même chose s'affiche à mon écran (sans la barre proprement dite) mais au lieu de passer de 0% à 1% 2% jusque 100%etc ... je veux passer de Waiting à Running et Finished en fonction du retour de la valeur de $STATUS (Q,R, E).

    Peut être que je ne suis pas très clair ?

    Merci d'avance.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    je veux passer de Waiting à Running et Finished en fonction du retour de la valeur de $STATUS (Q,R, E).
    Si tu veux une version portable (comme le "bar" que tu montres en exemple), ça peut être un peu compliqué... (cf. le code de bar).

    Sinon, pour une version ad hoc, dans ta boucle, tu remplaces:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "Status job : Waiting ..."
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo -n "^MStatus job : Waiting ...    "
    (avec un "vrai" return (ctrl-M) et non les deux caractères "^" "M")

    Si l'option echo -n n'est pas supportée, il faut utiliser "\c":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "^MStatus job : Waiting ...    \c"
    Dans tous les cas, il faut suffisamment d'espaces à la fin de la chaîne pour "effacer" les caractères précédents lorsque la chaine courante est moins longue que la précédente.

    Rq: cette solution n'utilise pas les capacités du termcap

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Si l'option echo -n n'est pas supportée, il faut utiliser "\c":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "^MStatus job : Waiting ...    \c"
    Plutôt que de se casser la tête avec echo, mieux vaut utiliser la commande portable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "\rStatus job : Waiting ...    "

  6. #6
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Plutôt que de se casser la tête avec echo, mieux vaut utiliser la commande portable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf "\rStatus job : Waiting ...    "
    Merci pour vos réponses.

    donc j'ai plutot utilisé le printf et j'ai fais un test avec le code ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #!/bin/ksh
     
    A=0
     
    while [ $A != 101 ]
    do
    	if [ $A -lt 10 ]
    	then
    		STATUS="Waiting ..."
    	elif [ $A -eq 10 ]
    	then
    		STATUS="Running ..."
     
    	elif [ $A -eq 100 ]
    	then
    		STATUS="Finnished !"
    	fi
     
    printf "\rStatus job : $STATUS"
    ((A=A+1))
    sleep 0.1
    done
    printf "\n"
    Donc le statuts change bien comme je le souhaite, je vais donc maintenant l'adapter à mon code.

    Encore merci pour votre participation.

Discussions similaires

  1. [Objective-C] comment afficher dans un scrollview une image ou une vidéo puis du texte?
    Par Seelass dans le forum Objective-C
    Réponses: 0
    Dernier message: 17/07/2012, 15h55
  2. Réponses: 1
    Dernier message: 26/02/2010, 15h30
  3. iExlorer ou autres, comment afficher la barre de statut
    Par Rodolphe_1940 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/12/2006, 17h38
  4. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo