2016-07-16 2 views
1

Привет я пытаюсь сделать простую программу с быстрым, чтобы выполнить эту команду, которая добавляет пустое пространство в доке:Использование NSTask в стрижа, чтобы выполнить команду терминала

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

это код, который я использование:

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) 

У меня нет ошибок, но ничего не происходит. Может кто-то мне помочь, пожалуйста?

+0

Пожалуйста, сделать некоторые исследования. В StackOverflow вы можете найти сообщения, относящиеся к 'NSTask', например: [this] (http://stackoverflow.com/questions/35854503/swift-2-1-osx-shell-commands-using-nstask-work-when -run-from-xcode-but-not-when) или [this] (http://stackoverflow.com/questions/36779688/swift-nstask-function). Кроме того, обратитесь к справочным страницам класса «NSTask». – user3078414

+0

, который сказал вам, что я этого не сделал?, Я пришел сюда, потому что не нашел решения. –

ответ

0
 
    defaults write ... ; killall Dock 

являются две команды. Когда вы вводите эту строку в Терминале, она передается в вашу оболочку (обычно «bash» на OS X), и оболочка затем выполняет обе команды последовательно.

С другой стороны, NSTask выполняет только одну команду и делает ничего из магии, которую обычно выполняет оболочка. В вашем случае все аргументы, включая финальную «killall Dock», передаются как аргументов /usr/bin/defaults.

Возможное решение было бы выполнить двухNSTask сек последовательно, один для команды defaults, и один для команды killall.

+0

Хорошо, я попробую и скажу вам результат, спасибо помощнику. –

+0

Спасибо, он работал после некоторой настройки: D .. я отправлю код в качестве ответа. –

1

Это код, который работал для меня:

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) 
Смежные вопросы