2017-12-20 2 views
0

Ich möchte den Fortschrittsbalken verwenden zeigt den Klon Fortschritt. Ich kann nichts mit meinem Code bekommen. Hoffe jemand kann mir helfen,Wie man einen Fortschrittsbalken verwendet, zeigt den `git clone` Fortschritt durch NSTask in Kakao

let pro = Process() 
pro.launchPath = "/bin/bash" 
pro.arguments = ["-c", "cd /Users/admin/Documents; git clone https://gitee.com/gjesse/laravel.git"] 

pro.terminationHandler = { pro in 
    print("clone finish") 
} 

let pip = Pipe() 
pro.standardOutput = pip 

let file = pip.fileHandleForReading 
file.readInBackgroundAndNotify() 

NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable, object: file, queue: nil) { notification in 
    let output = file.readDataToEndOfFile() 
    print("log\(String(describing: String(data: output, encoding: String.Encoding.utf8)))log") 
} 
pro.launch() 
pro.waitUntilExit() 
+0

Was ist falsch an Ihrem Code? Welchen Fehler hast du? –

+0

Ich kann die Protokolle nicht bekommen. –

Antwort

0

Ich benutze diese Funktion für alle Aufgaben:

@discardableResult 
private func process(launchPath: String? = nil, arguments: [String]) throws -> String? { 
    let process = Process() 
    if let launchPath = launchPath { 
     process.currentDirectoryPath = launchPath 
    } 
    process.launchPath = "/usr/bin/env" 
    process.arguments = arguments 

    var errorData = Data() 

    let outputPipe = Pipe() 
    process.standardOutput = outputPipe 

    let errorPipe = Pipe() 
    process.standardError = errorPipe 

    errorPipe.fileHandleForReading.readabilityHandler = { handler in 
     let data = handler.availableData 
     errorData.append(data) 
    } 

    process.launch() 

    let outdata = outputPipe.fileHandleForReading.readDataToEndOfFile() 

    process.waitUntilExit() 

    if process.terminationStatus != 0 { 
     throw Error.processFailed(status: process.terminationStatus, message: errorData.shellString) 
    } 

    return String(data: outdata, encoding: .utf8) 
} 

Für git clone Aktion, verwende ich diese Funktion:

func clone(fromPath path: String, toLocalPath localPath: String, branch: String? = nil) throws { 
    var arguments = ["git", "clone", path, localPath, "--quiet"] 
    if let branch = branch { 
     arguments.append(contentsOf: ["-b", branch]) 
    } 
    try process(arguments: arguments) 
} 

Für Sie beispielsweise nur Aufruf :

clone(fromPath: "https://gitee.com/gjesse/laravel.git", toLocalPath: "/Users/admin/Documents") 
+0

Entschuldigung, ich möchte die Fortschrittsanzeige verwenden, um den Fortschritt des Klons anzuzeigen. Nicht nur meine Codes klonen. –

+0

Bitte aktualisieren Sie die Frage. BTW, Sie können 'TerminalController' von [Dienstprogramm] (https://www.hackingwithswift.com/articles/44/apple-s-new-utility-library-will-power-up-command-line-apps) für verwenden Fortschrittsbalken zeigt –

+0

Sorry, meine Beschreibung ist nicht klar genug. Ich habe die Frage aktualisiert. –

Verwandte Themen