我有以下功能:
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?感谢。
答案 0 :(得分:2)
在脚本中使用command
的位置,请尝试将其替换为
command 2>&1
因为它会将标准错误流(2)与标准输出流(1)合并,然后你会将它们都返回给你。