加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用Swift Xcode在Mac应用程序中运行终端命令

发布时间:2020-12-14 17:55:10 所属栏目:百科 来源:网络整理
导读:我正在尝试在我正在开发的Mac应用程序中运行终端命令.终端命令是: sudo sysctl -w net.inet.tcp.delayed_ack=0 我尝试过使用NSTask,但似乎每次都在做错事. 我只想运行此命令并打印输出. 感谢您的关注. PS.这是我当前的代码看起来像(感谢您的回复): let tas
我正在尝试在我正在开发的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执行操作的更多信息,请阅读我的帖子: http://manavgabhawala.me/#/blog/grand-central-dispatch

let task = NSTask()
task.launchPath = "/usr/sbin/sysctl"
task.arguments = ["-w",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访问权限的用户的密码.所有密码输入错误都将出现在标准错误管道中.让我知道这个是否奏效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读