Communication avec gnuplot

Publié : 16.07.2009 - 21h45 par Jaxom

Bonjour,

Depuis hier je m'essaie à gnuplot. J'ai déjà réussi à le compiler dans sa dernière version. J'arrive très bien à le faire fonctionner depuis le terminal.

Maintenant j'ai dans l'idée de faire une petite application qui utiliserait gnuplot et afficherai les graphiques dans une NSView. C'est la première fois que j'utilise NSTask et NSPipe et bien sûr je n'ai aucun résultat.

J'ai essayé deux ou trois choses. Ma dernière tentative pour voire si quelque choses se passe est au-dessous. Je peux voire dans le Moniteur d'Activité que gnuplot se lance bien en process fils de mon appli.

Est-ce que quelqu'un à une idée à proposer ?

Code : Tout sélectionner

- (void)awakeFromNib
{
   NSLog(@"%@, %@", self, NSStringFromSelector(_cmd));
   NSTask *gnuplotTask = [[NSTask alloc] init];
   [gnuplotTask setLaunchPath:@"/usr/local/bin/gnuplot"];
   [gnuplotTask setCurrentDirectoryPath:[NSHomeDirectory() stringByAppendingPathExtension:@"Desktop"]];
   [gnuplotTask setStandardInput:[NSPipe pipe]];
   [gnuplotTask setStandardOutput:[NSPipe pipe]];
   
   [[NSNotificationCenter defaultCenter] addObserver:self
                                  selector:@selector(dataAvailable:)
                                     name:NSFileHandleDataAvailableNotification
                                    object:[[gnuplotTask standardOutput] fileHandleForReading]];
   [[[gnuplotTask standardOutput] fileHandleForReading] readInBackgroundAndNotify];
   
   [gnuplotTask launch];
}

- (void)dataAvailable:(NSNotification *)aNotification
{
   NSData *data = [[aNotification userInfo] objectForKey:NSFileHandleNotificationDataItem];
   
   NSLog(@"%@, %@\n%@", self, NSStringFromSelector(_cmd), [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]);
}


Re: Communication avec gnuplot

Publié : 17.07.2009 - 15h24 par Jaxom

Bon, je me réponds à moi-même. J'y suis arrivé. J'avais un peu mélangé les notifications sur les NSFileHandle.

J'arrive maintenant à envoyer mes commandes à gnuplot et à récupérer les résultats pour afficher l'image produite dans une fenêtre de mon application.

Maintenant, pour un cas plus général je me pose encore la question de savoir quand je dois arrêter d'attendre de nouvelles données (pour l'instant j'ai mis un bouton sur la fenêtre commandant l'affichage des données accumulée jusque là).


Re: Communication avec gnuplot

Publié : 10.08.2009 - 12h36 par Jaxom

J'avais posé ma question il y un moment. Voici où j'en suis.

J'ai trouvé une solution . Mais comme elle est quand même assez ancienne, les premières références que j'ai trouvées remontent à 1997 et NextStep, je regarde s'il y a rien utilisant une API de niveau un peu plus élevée.