Swift +终端

时间:2017-03-14 08:23:44

标签: 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»\'"])

任何帮助?

1 个答案:

答案 0 :(得分:1)

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

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

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