运行 Mac 应用中的终端命令 Swift Xcode

Run a terminal command in a Mac app with Swift Xcode

我正在尝试 运行 我正在开发的 Mac 应用程序中的终端命令。终端命令为:

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:不允许操作

试试这个,如果有效请告诉我。您应该使用 dispatch_async 或 NSOperationQueue 在后台线程上执行此操作。有关如何使用 Grand Central Dispatch 执行操作的更多信息,请阅读我的 post:http://manavgabhawala.me/#/blog/grand-central-dispatch

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

另外,如果这不起作用,请更新问题以包括确切的错误和您在 NSTask 中使用的代码。现在这不会有你想要的 sudo 效果,如果你想看看: https://developer.apple.com/library/mac/documentation/Security/Conceptual/authorization_concepts/01introduction/introduction.html 它告诉你如何使用 sudo。对于非沙盒应用程序,您也可以执行与上述相同的操作,但将 launchPath 更改为 /bin/sh,然后添加参数 "-S" 并添加参数 "/usr/sbin/sysctl"。然后,您可以使用 standardInput 输入具有 root 访问权限的用户的密码。所有密码输入错误都将出现在标准错误管道中。让我知道这是否有效。