NSTask et les arguments

difnetdifnet Membre
21:07 modifié dans API AppKit #1
Bonsoir,

Je tente en vain de développer une petite application permettant de générer un rapport à  l'aide de System Profiler.
L'application est parfaitement fonctionnelle en shell. J'ai donc décidé d'y rajouter une interface et d'en faire une application Cocoa.

Pour ceci et après recherches, il semble que je dois utiliser la classe NSTask. Pas de soucis jusqu'à  présent. Mon problème vient des "options" de la commande que je tente d'exécuter.

Voici le commande shell en question :
system_profiler -detailLevel full -xml > report.xml


Voici mon code Cocoa :
- (IBAction)createReport:(id)sender<br /> {<br />	 NSTask *systemProfiler = [[NSTask alloc] init];	<br />	 [systemProfiler setLaunchPath:@&quot;/usr/sbin/system_profiler&quot;];<br />	 NSArray *args = [NSArray arrayWithObjects:@&quot;-detailLevel mini -xml &gt; report.xml&quot;, nil];<br />	 [systemProfiler setArguments:args];<br />	 [systemProfiler launch];<br />	 [systemProfiler release];<br /> }


Si je regarde dans la console de Xcode, je vois bien la commande qui est exécutée mais les arguments ne sont pas pris en compte.
J'ai essayé différentes méthodes trouvées sur Internet (séparer les arguments, déclaration de "args" différente, etc...) mais rien n'a fonctionné.

Quelqu'un aurait une idée?
D'avance merci. :)

PS: Etant débutant, je ne sais pas si le bout de code que j'ai mis est suffisant et d'avance, excusez mon vocabulaire qui peut ne pas être adapté dans certains cas, fonction, classe, méthode, instance et j'en passe. C'est un peu flou parfois ^^

Réponses

  • ThibautThibaut Membre
    21:07 modifié #2
    L'espace est un séparateur d'argument pour le Terminal. Mais avec NSTask, c'est lui qui gère les séparateurs.

    NSArray *args = [NSArray arrayWithObjects:@&quot;-detailLevel&quot;, @&quot;mini&quot;, @&quot;-xml&quot;, @&quot;&gt;&quot;, @&quot;report.xml&quot;, nil];
    


    Par ailleurs, il n'es pas conseillé de faire "> report.xml" dans un NSTask. Cela ne doit certainement pas fonctionner, il faut associer un standardOutput au NSTask pour gérer tout cela. Je pense qu'il doit y avoir des exemples sur ce forum (au pire des cas, un peu de pub, j'avais fait un petit article sur mon blog).
  • difnetdifnet Membre
    21:07 modifié #3
    Merci, je vais essayer.
    Pour générer le fichier, je me demandais justement si je n'allais pas envoyer les données dans un NSPipe pour ensuite les récupérer je ne sais pas encore comment :)
    Je vais me pencher plus sérieusement sur le souci.

    En tout cas, merci!
  • difnetdifnet Membre
    21:07 modifié #4
    It works!

    Merci beaucoup. Je vais maintenant étudier les choses pour mettre les informations dans un fichier sans utiliser le shell.

    PS: Je suis déjà  passé sur ton site il y a 2jours et j'ai déjà  étudié ton exemple NSTask :P
  • tabliertablier Membre
    21:07 modifié #5
    Tu peux jeter un oe“il également à  l'exemple d'Apple "Moriarity". Ils ont écrit un "Task wrapper" utilisable dans cet exemple, mais surtout modifiable pour l'adapter à  ton cas.
  • difnetdifnet Membre
    21:07 modifié #6
    Je vais y jeter un oeil quand j'aurai le temps, merci de l'info :)
Connectez-vous ou Inscrivez-vous pour répondre.