10 Stimmen

Wie führt man ein externes Programm in Swift aus?

Ich bin neu in Swift und habe nichts darüber gefunden, wie man externe Programme ausführt oder auf externe Prozesse mit der Swing-Sprache zugreift.

Ist es möglich, dies im aktuellen Entwicklungsstand der Sprache zu tun oder sollte ich stattdessen Objective-C verwenden?

Vielleicht gibt es einige Objective-C-Bibliotheken, die in meinem Swift-Programm verwendet werden können?

Danke.

14voto

Rob Napier Punkte 265102

Sie können externe Programme mit NSTask ausführen. Zum Beispiel, von Circle and Square:

import Foundation

func executeCommand(command: String, args: [String]) -> String {

    let task = NSTask()

    task.launchPath = command
    task.arguments = args

    let pipe = NSPipe()
    task.standardOutput = pipe
    task.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = NSString(data: data, encoding: NSUTF8StringEncoding)

    return output        
}

let commandOutput = executeCommand("/bin/echo", ["Hallo, ich bin hier!"])
println("Befehlsausgabe: \(commandOutput)")

3voto

qed Punkte 20934

Verbesserte Version von Robs Antwort (da Sie den vollständigen Pfad Ihrer ausführbaren Datei nicht angeben müssen) und auch aktualisiert für Swift 3:

import Foundation

func execCommand(command: String, args: [String]) -> String {
    if !command.hasPrefix("/") {
        let commandFull = execCommand(command: "/usr/bin/which", args: [command]).trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        return execCommand(command: commandFull, args: args)
    } else {
        let proc = Process()
        proc.launchPath = command
        proc.arguments = args
        let pipe = Pipe()
        proc.standardOutput = pipe
        proc.launch()
        let data = pipe.fileHandleForReading.readDataToEndOfFile()
        return String(data: data, encoding: String.Encoding.utf8)!
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X