【发布时间】:2015-07-02 19:09:24
【问题描述】:
我正在尝试在我正在开发的 Mac 应用程序中运行终端命令。终端命令是:
sudo sysctl -w net.inet.tcp.delayed_ack=0
我尝试过使用 NSTask,但似乎每次都做错了。
我只想运行这个命令并打印输出。 感谢您的关注。
附言。这是我当前的代码的样子(感谢您的回复):
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 调用,因为它会执行非常特殊的操作来授权用户(包括可能的弹出对话框)。比较stackoverflow.com/questions/4050687/how-to-use-nstask-as-root。
-
感谢您的回复。我还将我当前的代码添加到问题中。
-
正如我所说,您的方法很可能存在一般问题。查看链接到的线程。
标签: xcode macos swift terminal nstask