J'utilise le code suivant dans mon projet de cacao pour appeler un script que j'ai fait. Le script est dans le même dossier que le projet et se présente même sous le dossier "Ressources" de Xcode. Le chemin approprié est trouvé, mais il dit toujours que le chemin n'est pas accessible. Aide s'il vous plaît.
NSBundle *mainBundle=[NSBundle mainBundle]; NSString *path=[mainBundle pathForResource:@"script" ofType:@"sh"]; NSTask *task = [[NSTask alloc] init]; [task setLaunchPath: path]; NSLog (path); NSPipe *pipe = [NSPipe pipe]; [task setStandardOutput: pipe]; [task setStandardError: pipe]; NSFileHandle *file = [pipe fileHandleForReading]; [task launch]; [task waitUntilExit]; NSData *data = [ddFile readDataToEndOfFile]; NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; HDSpeed = [f output]; [f release]; [task release];
5 Réponses :
Ce que vous devrez faire est d'obtenir la coquille binaire et de transmettre votre script comme argument. Donc, si le script shell est écrit ciblant Bash, obtenez l'interprète Bash et transmettez-la une liste d'arguments avec un argument: le chemin de votre script.sh. P>
Merci! Je suis nouveau à OSX, alors pourriez-vous me dire où se trouve l'interprète Bash?
/ Bin Toujours à moins que l'utilisateur a modifié leur installation de base, ce qui semble improbable à cet égard.
Oh merci! / bin / bash semblait fonctionner mais maintenant le programme semble cesser d'aller de l'avant après que la tâche a été lancée. Tout indice à ce sujet?
Que feriez-vous si le script lui-même prend des arguments?
à cause de [Tâche gaitulexit]; p>
Ajouter cette ligne avant [Lancement de la tâche] CODE>:
[task setLaunchPath:@"/bin/sh"];
Cette erreur se produit lorsque le script lui-même n'est pas marqué comme exécutable. Ouvrez une fenêtre de terminal et accédez à l'endroit où le script est dans votre répertoire de projet, puis entrez ceci: nettoyer et construire et vous pouvez utiliser le script directement - cela signifie également que vous pouvez également passer des arguments à ce. p> p>
Lorsque je change le nom de mon script (stocké dans l'ensemble de l'apps d'app) à partir de foo.sh code> à
foo.command code> J'évite cette erreur.
let path = Bundle.main.path(forResource: "foo", ofType: "command")