NSTask et StandardOutput

tabliertablier Membre
mars 2012 modifié dans Vos applications #1
Je suis en train d'améliorer mon logiciel AEv-Utility (AEvU) en utilisant un NSTask asynchrone.

AEvU lance une application qui génère ou reçoit des AppleEvents. Les variables d'environnement du NSTask valident le "AppleEvents Logging" et je récupère bien de manière asynchrone les représentations des AppleEvents qui transitent entre la source et la cible. Pas de problème là . Extrait du code:
task = [[NSTask alloc] init];



if (environ!=nil)

[task setEnvironment:environ] ; // variable d'environnement



[task setStandardOutput: [NSPipe pipe]];

[task setStandardError: [task standardOutput]];

[task setLaunchPath: [arguments objectAtIndex:0]]; // chemin de l'exécutable

if ([arguments count]>1) // arguments s'il y en a

[task setArguments: [arguments subarrayWithRange: NSMakeRange (1, ([arguments count] - 1))]];



[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getData:)

name: NSFileHandleReadCompletionNotification object: task standardOutput] fileHandleForReading;

[[[task standardOutput] fileHandleForReading] readInBackgroundAndNotify];

[task launch];
Avec:
NSDictionary environ = [NSDictionary dictionaryWithObjectsAndKeys: @1, @AEDebugSends, @1, @AEDebugReceives,nil] ;

NSArray arguments = [NSArray arrayWithObject:@chemin de l'exécutable Unix] ;
Ce code est extrait de l'exemple ICI et modifié pour mon problème.

Ce que je trouve curieux: la console reçoit également les données qu'AEvU reçoit. Je ne comprend pas pourquoi puisque la sortie standard est détournée vers le pipe de réception.

Une explication?
Mots clés:

Réponses

  • "Standard error is where all diagnostic messages are sent."

    La sortie d'erreur ne sert, en fait, pas que pour les erreurs. À voir de ce côté là  ?
  • Ce ne sont pas les erreurs qui sont sur la console, ce sont tout les textes! Tout les textes arrivent sur la console ET dans mon programme, donc simultanément des deux cotés. D'autre part Standard error est détourné vers standard Output lui-même détourné vers mon programme.

    J'ai essayé de mettre /bin/bash comme exécutable et "-c", "chemin logiciel à  tester" comme arguments. ça ne change rien, j'ai toujours doublement des textes.
Connectez-vous ou Inscrivez-vous pour répondre.