Я пытаюсь запустить команду терминала в приложении Mac, которое я разрабатываю. Команда терминал:Запустить команду терминала в приложении Mac с Swift Xcode
sudo sysctl -w net.inet.tcp.delayed_ack=0
Я попытался с помощью NSTask но мне кажется, что я делаю что-то неправильно каждый раз.
Я просто хочу запустить эту команду и распечатать вывод. Благодарим за внимание.
PS. вот что мой текущий код выглядит следующим образом (благодаря вашим ответам):
let task = NSTask()
task.launchPath = "/usr/sbin/sysctl"
task.arguments = ["-w", "net.inet.tcp.delayed_ack=0"]
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
Я получаю следующее сообщение в выводе:
net.inet.tcp.delayed_ack: 3
Sysctl: net.inet. tcp.delayed_ack = 0: Операция не разрешена
Вы не показали, что вы пробовали, но я предполагаю, что вы не можете просто называть sudo как NSTask, так как для авторизации пользователя (включая возможные всплывающие диалоги) очень важно настроить специальные функции. Сравните http://stackoverflow.com/questions/4050687/how-to-use-nstask-as-root. –
Спасибо за ваш ответ. Я также добавил свой текущий код к вопросу. – MRF
Как я уже сказал, есть, вероятно, общие проблемы с вашим подходом. Посмотрите на связанную нить. –