Swift 如何使用进度条在cocoa中通过NSTask显示“git clone”进度
我想用进度条显示克隆进度。我用我的代码什么也得不到。希望有人能帮助我Swift 如何使用进度条在cocoa中通过NSTask显示“git clone”进度,swift,git,macos,Swift,Git,Macos,我想用进度条显示克隆进度。我用我的代码什么也得不到。希望有人能帮助我 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") } l
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()
我将此功能用于任何任务:
@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)
}
对于git克隆操作,我使用以下函数:
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)
}
例如,只需拨打:
clone(fromPath: "https://gitee.com/gjesse/laravel.git", toLocalPath: "/Users/admin/Documents")
你的代码怎么了?您有哪一个错误?我无法获取日志。对不起,我想使用进度条显示克隆进度。不仅仅是克隆我的代码。请更新问题。顺便说一句,您可以使用TerminalController从进度条显示对不起,我的描述不够清楚。我已经更新了问题。