Sto provando a eseguire un comando di terminale in un'app per Mac che sto sviluppando. Il comando da terminale è:Esegui un comando di terminale in un'app Mac con Swift Xcode
sudo sysctl -w net.inet.tcp.delayed_ack=0
Ho provato con NSTask ma sembra che sto facendo qualcosa di sbagliato ogni volta.
Voglio solo eseguire questo comando e stampare l'output. Grazie per l'attenzione.
PS. qui è ciò che il mio codice attuale assomiglia (grazie alle vostre risposte):
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
ricevo il seguente messaggio nell'output:
net.inet.tcp.delayed_ack: 3
sysctl: net.inet. tcp.delayed_ack = 0: Operazione non consentita
Non hai mostrato ciò che hai provato, ma presumo che tu non possa semplicemente chiamare sudo come un NSTask, dato che fa cose molto speciali per autorizzare un utente (comprese le possibili finestre di dialogo a comparsa). Confronta http://stackoverflow.com/questions/4050687/how-to-use-nstask-as-root. –
grazie per la tua risposta. Ho anche aggiunto il mio codice attuale alla domanda. – MRF
Come ho già detto, ci sono probabilmente problemi generali con il tuo approccio. Dai un'occhiata alla discussione collegata. –