Ich habe die folgende Funktion:Wie kommt man Daten in Standard-Fehlerausgabe mit Apple Shell
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
}
}
Diese Funktion grundsätzlich einen Befehl mit Administratorrechten ausgeführt wird. Jetzt versuche ich, Befehle wie echo Hello World
auszuführen, der output
Parameter hat eine Zeichenfolge, die aussieht wie Hello World
, die in stdout
ausgegeben wird. Aber als ich versuchte, Befehle auszuführen, die Daten in stderr
ausgeben, kann die Ausgabe die Daten nicht abrufen. Gibt es eine Möglichkeit, Daten in stderr
ohne NSTask abzurufen? Vielen Dank.
Vielleicht setzen Sie 'command' auf' command 2> & 1', so dass es sowohl stdout als auch stderr zurückgibt. –
@MarkSetchell danke, du kannst dies jetzt als Antwort posten –
Sicher, ich habe es getan - froh, dass es für dich geklappt hat. –