swift +终端

标签 swift

我正在寻找一种在 Swift (macOS) 中运行终端命令的方法。我遇到了this发布,但我似乎无法获得任何解决方案。我正在尝试从我的应用程序关闭我的 mac,就像您可以从终端执行的那样(osascript -e 'tell app "loginwindow"to «event aevtrsdn»'),但每当我这样做时,我都会得到错误:无法 posix_spawn:错误 13。

我正在使用这段代码:

func shell(launchPath: String, arguments: [String] = []) -> (String? , Int32) {
        let task = Process()
        task.launchPath = launchPath
        task.arguments = arguments

            let pipe = Pipe()
            task.standardOutput = pipe
            task.standardError = pipe
            task.launch()
            let data = pipe.fileHandleForReading.readDataToEndOfFile()
            let output = String(data: data, encoding: .utf8)
            task.waitUntilExit()
            return (output, task.terminationStatus)
        }

我这样调用它:

let z = shell(launchPath: "/usr/bin/osascript", arguments: ["-e", "\'tell app \"loginwindow\" to «event aevtrsdn»\'"])

有什么帮助吗?

最佳答案

你的代码是正确的,但你不能包含第二个参数 在单引号中:

let z = shell(launchPath: "/usr/bin/osascript", arguments: ["-e", "tell app \"loginwindow\" to «event aevtrsdn»"])

只有在从 shell 执行程序时才需要这样做。 Process 将给定的参数直接传递给生成的可执行文件, 无需 shell 解释。

关于 swift +终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780963/

相关文章:

objective-c - Swift SWRevealViewController 菜单在转回特定页面后不显示

uitableview - Swift:将 UITableViewCell 标签传递给新的 ViewController

ios - SceneKit – Material 的 colorBufferWriteMask

iOS swift : Integrating OneDrive LiveSDK

ios - Firestore 数据库创建错误

ios - UILabel 需要很长时间才能快速加载

ios - Firebase Swift Retrieve 检索单个子项

ios - 将 CADisplayLink 与 tableViewCells 一起使用所需的指南

swift - 使用语句 For 写入元组

ios - 无法在 Firebase 数据库 Swift 中从 JSON 检索数据