2016-04-25 14 views
0

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.

+0

Vielleicht setzen Sie 'command' auf' command 2> & 1', so dass es sowohl stdout als auch stderr zurückgibt. –

+0

@MarkSetchell danke, du kannst dies jetzt als Antwort posten –

+0

Sicher, ich habe es getan - froh, dass es für dich geklappt hat. –

Antwort

2

Wo Sie command in Ihrem Skript verwenden, versuchen Sie es mit

command 2>&1 

ersetzt wie die Standardfehler Strom kombinieren (2) mit dem Standard aus Strom (1) und dann werden Sie Lass sie beide zu dir zurückkehren.

Verwandte Themen