Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

general.general : connection GNUplot et script linux

Posté par Anas3000 () le 02 avril 2008

Salut,



je veux créer un script linux qui prend en argument deux valeurs $1 et $1, ce script doit lancer gnuplot et tracer le point (x,y). ce que je veux réaliser en gros:



la première fois je lance par exemple :

./script.sh 2 3

./script.sh 3 4



je demande quoi écrire dans le script pour que quand je lance ces deux commandes par exemple je doit avoir une droite qui connecte (2,3)--->(3,4)



le problème que j ai , c'est que a chaque lancement une nouvelle fenêtre se lance, moi je veux tracer dans la même fenêtre ( la fenêtre dois que je la ferme manuellement)



besoin vraiment de votre aide



Merci d'avance

> Lire le message (17 commentaires, moyenne: 1,5).  

Vous avez demandé le commentaire #920137.

Incohérence

Posté par Kerro () le 02/04/2008 à 19:08. (lien). Évalué à 2.

Je pense que tu as oublié d'expliquer quelque chose.

Tu souhaites passer les coordonnées d'un seul point alors que tu veux tracer une droite. Je ne crois pas qu'un bon mathématicien soit capable de faire ça. Alors avec un simple script ça ne va pas être facile :-)

La solution est toute simple:
./script.sh 2 3 3 4
Après, je ne sais pas ce qui est dans ton script, mais là déjà tu as les deux points, donc possibilité de tracer une droite.

Tu as peut-être oublié de préciser que tu as un programme qui ne te fourni que 2 paramètres à la fois. Ou quelque chose du genre.

--
--- Dans un restaurant, Chuck Norris a commandé un steak. Le steak a obéi --
  • [^]Re: Incohérence

    Posté par Jean Boussier () le 02/04/2008 à 20:17. (lien). Évalué à 1.

    Pas forcément si le script peut lire des données depuis gnuplot.

    Ensuite pour le contenu du script il faut réussir à communiquer avec gnuplot.

    Je ne le connais pas du tout mais a ta place je regarderais du coté de DBUS/DCOP, ou des arguments de gnuplot.

    Sinon peut être propager des messages systèmes qui simulerais des clicks, mais là ça deviens très tarabiscotté.

    [^]Re: Incohérence

    Posté par Anas3000 () le 02/04/2008 à 22:26. (lien). Évalué à 1.

    Merci pour vos réponses.
    je vois que j'ai pas bien expliquer ce que je veux faire.

    bon les arguments du script sont $1 qui est a chaque fois incrémenter de 1 ( automatiquement) et $2 qui est donné aléatoirement. bon si je lance par exemple ce scripte 100 fois je vais avoir 100 points . donc ce que je veux faire c'est de tracer le graphe qui passe par tous ces points !!!

    les problèmes que j'ai : comment connecter ces points avec gnuplot ???
    le 2 éme : je veux par exemple , si je lance ce script 100 fois , gnuplot me tracera ces 100 points (connecté) dans une seule fenêtre. (avec le programme que j'ai réalisé, si je lance 100 fois ce script , ja vais avoir 100 graphe , chaque graphe c'est que le point donné en argument!!!!)

    j'éspère que j'ai bien expliquer mon problème

    • [^]Re: Incohérence

      Posté par Christophe --- () le 02/04/2008 à 23:39. (lien). Évalué à 2.

      Bonsoir, ce qu'il te faut, c'est détacher le process gnuplot de ton script pour qu'il reste dans son co1n. Voici une idée pour faire cela:

      # Le nom du pseudo-fichier qui va permettre d'envoyer les instructions
      # à gnuplot (c'est une FIFO, pour ceux qui suivent pas)
      MAFIFO=/tmp/ma_jolie_fifo_a_moi_que_jai
      
      if [ ! -f $MAFIFO ]; then
        # C'est la première fois, il faut donc la créer
        mkfifo $MAFIFO
      
        # ...et lancer gnuplot
        gnuplot < $MAFIFO &
        # Ne pas oublier le '&', car le gnuplot il est grand, il est majeur,
        # il va vive sa vie bien gentillement de son côté
      fi
      
      # Bon, bin plus qu'à envoyer une commande:
      echo "Hello you..." >> $MAFIFO
      # Je sait pas pourquoi, mais je pense qu'il va pas l'aimer celle là,
      # pourtant j'suis poli :)
      
      voila l'idée, plus qu'à remplir joyeusement et avec entrain.

      • [^]Re: Incohérence

        Posté par Anas3000 () le 03/04/2008 à 01:34. (lien). Évalué à 1.

        Merci bien.
        Mais malheureusement j'ai pas bien compris le code. si tu peux m'aider plus ça va me faire un grand plaisir.
        ou je peux utiliser les arguments!!! (x et y) .
        et merci aussi de m'expliquer ce que cette instruction fait:
        commande >> $MAFIFO

        • [^]Re: Incohérence

          Posté par Christophe --- () le 03/04/2008 à 20:12. (lien). Évalué à 2.

          En même temps, le code ne fonctionnais pas... Voici qui fonctionne:

          MAFIFO=kapoueee
          if [ ! -p $MAFIFO ]; then
            mkfifo $MAFIFO
            ( while true; do
                cat $MAFIFO
              done | gnuplot
            ) &
            echo "set multiplot"     > $MAFIFO
            echo "set xrange [0:10]" > $MAFIFO
            echo "set yrange [0:10]" > $MAFIFO
          fi
          echo "plot \"< echo $1 $2\" w p pt 2" >> $MAFIFO
          

          • [^]Re: Incohérence

            Posté par Anas3000 () le 03/04/2008 à 23:47. (lien). Évalué à 1.

            Re,
            Merci beaucoup Mensieur.Cristopher: le code Marche bien. mais j'ai eu un petit problème c'est que j'ai fermé la fenêtre manuellement et apres quand j'ai voulais lancer le script, rien ne s'affichera.
            En gros, c'est ça le code que je cherche.
            Merci beaucpoup une autre fois.

            • [^]Re: Incohérence

              Posté par Christophe --- () le 04/04/2008 à 20:06. (lien). Évalué à 2.

              Là par contre je vais te décevoir: ce n'est pas possible (simplement, en tout cas)...

              Le problème est le suivant: quand tu ferme la fenêtre, c'est normal pour gnuplot, donc il ne fait rien, il ne préviens pas, il ne se termine pas. Donc, comme on ne peut pas savoir du côté du script que la fenêtre à été fermée, on ne peut pas réagir en conséquence.

              Les seules solutions reposent sur du bricolage. Je fais quelques essais et je te tiens au courant.

              • [^]Re: Incohérence

                Posté par Christophe --- () le 04/04/2008 à 20:25. (lien). Évalué à 2.

                Bon en fait voila, c'est presque pas compliqué...

                MAFIFO=kapoueee
                if [ ! -p $MAFIFO ]; then
                  MAFNETRE="Mon GNUPLOT a moi"
                  mkfifo $MAFIFO
                  ( tail -f $MAFIFO | gnuplot ; rm $MAFIFO ) &
                  echo "set term x11 title '$MAFNETRE'" > $MAFIFO
                  echo "set multiplot"     > $MAFIFO
                  echo "set xrange [0:10]" > $MAFIFO
                  echo "set yrange [0:10]" > $MAFIFO
                  ( sleep 5 ; while
                      xprop -name "$MAFNETRE" WM_NAME > /dev/null 2>&1
                    do sleep 1; done ; echo "quit" > $MAFIFO
                    sleep 1 ; echo "exit" > $MAFIFO ) &
                fi
                echo "plot \"< echo $1 $2\" w p pt 2" >> $MAFIFO
                

                • [^]Re: Incohérence

                  Posté par Anas3000 () le 05/04/2008 à 04:47. (lien). Évalué à 1.

                  Merci ,,,
                  mais il y'a encore un petit problème, la fenêtre se ferme après 5ms!!
                  j'essaye de travailler avec un 3ème argument. qui prend 2 valeurs "oui" ou "non",
                  oui : ça veut dire c'est le dernier point a tracer dans la fenêtre ("donc la fenêtre(gnuplot) doit se fermer apres une seconde par exemple)
                  non: ça veut dire il y'a des autres points a ajouter a ce graphe ( et dans ce cas ton premier code fait le travail)
                  j'ai pas réussi encore a le faire, mais je crois que c'est une bonne méthode. Que dite vous Mr.Cristophe et Merci de m'aider encore une fois

                  • [^]Re: Incohérence

                    Posté par Christophe --- () le 05/04/2008 à 15:58. (lien). Évalué à 2.

                    mais il y'a encore un petit problème, la fenêtre se ferme après 5ms!!

                    Il vaut vérifier que la commande xprop fonctionne, car c'est elle qui détecte que l'on a fermé la fenêtre. Pour cela, taper xprop -h dans un terminal devrais confirmer que c'est bon. S'il ne trouve pas la commande, cela vas être difficile.

                    j'essaye de travailler avec un 3ème argument. qui prend 2 valeurs "oui" ou "non",
                    oui : ça veut dire c'est le dernier point a tracer dans la fenêtre ("donc la fenêtre(gnuplot) doit se fermer apres une seconde par exemple)


                    il suffit de rajouter à la fin le code suivant:
                    if [ "$3" = "oui" ]; then
                       echo "quit" > $MAFIFO
                    fi

                    • [^]Re: Incohérence

                      Posté par Anas3000 () le 06/04/2008 à 04:19. (lien). Évalué à 1.

                      Re,
                      je vois que la solution c'est quand l'argument3 est "oui" il faut executer la commande
                      rm -f kapoueee, qd je le fait manuellement ça marche, qu'on je lance le script une nouvelle fois ça marche bien, mais quand j'ai rajouter cette commande au script, le message d'erreur suivant s'affiche : cat: kapoueee: Aucun fichier ou répertoire de ce type

                      voici le script :

                      MAFIFO=tube
                      if [ ! -p $MAFIFO ]; then
                      MAFENETRE="MOn Graphe"
                      r="countinue"
                      mkfifo $MAFIFO
                      (
                      while [ "$r" = "countinue" ]; do
                      cat $MAFIFO
                      done | gnuplot
                      ) &
                      echo "set term x11 title '$MAFNETRE'" > $MAFIFO
                      echo "set multiplot" > $MAFIFO
                      echo "set xrange [0:4000]" > $MAFIFO
                      echo "set yrange [0:400]" > $MAFIFO
                      fi
                      echo "plot \"< echo $1 $2\" w p pt 2" >> $MAFIFO
                      if [ "$3" = "oui" ]; then
                      echo "quit" > $MAFIFO
                      r="nocountinue"
                      rm -f tube
                      fi

                      je demande pourquoi ce script ne marche pas "la commande rm -f tube" cause toujours un problème

                      • [^]Re: Incohérence

                        Posté par Christophe --- () le 06/04/2008 à 16:12. (lien). Évalué à 2.

                        la variable r ne sert à rien, car comme indiqué au fin-fond de la page de man de bash:

                        If a command is terminated by the control operator &, the shell executes the command in the background in a subshell.

                        Le subshell signifie qu'il a lancé un nouveau shell, donc la variable r n'est plus la même, donc changer sa valeur dans le premier shell ne sera pas vu dans le deuxième shell.

                        Si tu fais rm tube, tu détruit le "fichier", mais pas ce qui lis de l'autre côté. Si tu ne veux pas de problème, il faut faire:

                        echo "quit" > $MAFIFO ; sleep 1; echo "exit" > $MAFIFO
                        sleep 1; rm $MAFIFO


                        comme dans mon 2e exemple, pour n'éffacer le "fichier" que quand l'autre côté en a bien terminé avec.

                        • [^]Re: Incohérence

                          Posté par Anas3000 () le 06/04/2008 à 22:32. (lien). Évalué à 1.

                          Merci,

                          maintenant ça marche bien,

                          Merci encore une autre fois...

                          • [^]Re: Incohérence

                            Posté par Anas3000 () le 07/04/2008 à 04:57. (lien). Évalué à 1.

                            Re,
                            Je vais vous deranger une autre fois Mr.Cristophe
                            est-ce que vous pouvez m'expliquer que fait cette commande exactement:
                            echo "plot \"< echo $1 $2\" w p pt 2" >> $MAFIFO

                            car je voulais supprimer le echo argment1 argument2 qui apparait dans le graphe, mais j'ai pas réussi...

                            • [^]Re: Incohérence

                              Posté par Christophe --- () le 07/04/2008 à 22:47. (lien). Évalué à 2.

                              pour supprimer la légende, il suffit de rajouter:

                              echo "unset key" > $MAFIFO

                              après le set yrange

                              • [^]Re: Incohérence

                                Posté par Anas3000 () le 10/04/2008 à 16:05. (lien). Évalué à 1.

                                Merci ça Marche comme d'habitude..