如何使用AppleScript shell获取标准错误输出中的数据

时间:2016-04-25 09:58:27

标签: swift macos applescript

我有以下功能:

func executeCommandAsAdminWithAppleScript(command: String, inout output: String?, inout errorDesc: String?) -> Bool {
    var errorInfo: NSDictionary?
    let source = "do shell script \"\(command)\" with administrator privileges"
    let script = NSAppleScript(source: source)
    let eventResult = script?.executeAndReturnError(&errorInfo)

    if eventResult == nil {
        errorDesc = nil
        if let code = errorInfo?.valueForKey(NSAppleScriptErrorNumber) as? NSNumber {
            if code.intValue == -128 {
                errorDesc = "The administrator password is required to do this.";
            }

            if errorDesc == nil {
                if let message = errorInfo?.valueForKey(NSAppleScriptErrorMessage) as? NSString {
                    errorDesc = String(message)
                }
            }
        }
        return false
    } else {
        output = (eventResult?.stringValue)!
        return true
    }
}

此函数基本上运行具有管理员权限的命令。现在我尝试执行echo Hello World之类的命令,output参数确实有一个类似Hello World的字符串,输出到stdout。但是当我尝试执行将数据输出到stderr的命令时,输出无法检索数据。那么有没有办法在stderr中检索数据而不使用NSTask?感谢。

1 个答案:

答案 0 :(得分:2)

在脚本中使用command的位置,请尝试将其替换为

command 2>&1

因为它会将标准错误流(2)与标准输出流(1)合并,然后你会将它们都返回给你。