2016-07-16 1 views
1

Salut je suis en train de faire un programme simple avec rapide pour exécuter cette commande qui ajoute un espace blanc dans le Dock:L'utilisation NSTask dans rapide pour exécuter une commande de terminal

defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}'; killall Dock

c'est le code i utilisation:

let task = NSTask() 
    task.launchPath = "/usr/bin/defaults" 
    task.arguments = ["write","com.apple.dock","persistent-apps","-array-add","'{\"tile-type\"=\"spacer-tile\";}';","killall Dock"] 
    let pipe = NSPipe() 
    task.standardOutput = pipe 
    task.standardError = pipe 
    task.launch() 
    task.waitUntilExit() 
    let data = pipe.fileHandleForReading.readDataToEndOfFile() 
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 
    print(output) 

Je ne reçois aucune erreur mais rien ne se passe. Quelqu'un peut-il m'aider s'il vous plaît?

+0

S'il vous plaît, faites quelques recherches. Sur StackOverflow, vous pouvez trouver des articles traitant de 'NSTask', tels que: [this] (http://stackoverflow.com/questions/35854503/swift-2-1-osx-shell-commands-using-nstask-work-when -run-from-xcode-but-not-when) ou [ceci] (http://stackoverflow.com/questions/36779688/swift-nstask-function). Consultez également les pages de référence de la classe 'NSTask'. – user3078414

+0

qui vous a dit que je n'ai pas?, Je suis venu ici parce que je n'ai trouvé aucune solution. –

Répondre

0
 
    defaults write ... ; killall Dock 

sont deux commandes. Lorsque vous tapez cette ligne dans le terminal, il est passé à votre shell (généralement "bash" sur OS X), et le shell exécute ensuite les deux commandes de manière séquentielle.

D'autre part, NSTask exécute juste une seule commande et fait rien de la magie qu'un shell fait habituellement. Dans votre cas tous les arguments, y compris le "killall Dock" final, sont passés comme arguments à /usr/bin/defaults.

Une solution possible serait d'exécuter deuxNSTask s séquentiellement, une pour la commande defaults, et l'autre pour la commande killall.

+0

D'accord, je vais essayer et dire le résultat, merci mon pote. –

+0

Merci mon pote il a travaillé après quelques ajustements: D .. je vais poster le code comme une réponse. –

1

C'est le code qui a fonctionné pour moi:

let task = NSTask() 
    task.launchPath = "/usr/bin/defaults" 
    task.arguments = ["write","com.apple.dock","persistent-apps","-array-add","{\"tile-type\"=\"spacer-tile\";}"] 
    let pipe = NSPipe() 
    task.standardOutput = pipe 
    task.standardError = pipe 
    task.launch() 
    task.waitUntilExit() 

    let task2 = NSTask() 
    task2.launchPath = "/usr/bin/killall" 
    task2.arguments = ["Dock"] 
    let pipe2 = NSPipe() 
    task2.standardOutput = pipe2 
    task2.standardError = pipe2 
    task2.launch() 
    task2.waitUntilExit() 


    let data = pipe.fileHandleForReading.readDataToEndOfFile() 
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String 
    print(output)