gpt4 book ai didi

swift - 使用 Swift 实时 NSTask 输出到 NSTextView

转载 作者:行者123 更新时间:2023-11-30 12:14:28 25 4
gpt4 key购买 nike

我正在使用 NSTask 来运行 rsync,并且我希望状态显示在窗口内 ScrollView 的 TextView 中。现在我有这个:

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

let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: NSASCIIStringEncoding)! as String

textView.string = output

这就是我关于传输的一些统计数据,但我想实时获取输出,就像我在 Xcode 中运行应用程序时打印出来的内容,并将其放入 TextView 中。有办法做到这一点吗?

最佳答案

自 macOS 10.7 起,NSPipe 上还有 readabilityHandler 属性,您可以使用该属性在新数据可用时设置回调:

let task = NSTask()

task.launchPath = "/bin/sh"
task.arguments = ["-c", "echo 1 ; sleep 1 ; echo 2 ; sleep 1 ; echo 3 ; sleep 1 ; echo 4"]

let pipe = NSPipe()
task.standardOutput = pipe
let outHandle = pipe.fileHandleForReading

outHandle.readabilityHandler = { pipe in
if let line = String(data: pipe.availableData, encoding: .utf8) {
// Update your view with the new text here
print("New ouput: \(line)")
} else {
print("Error decoding data: \(pipe.availableData)")
}
}

task.launch()

我很惊讶没有人提到这一点,因为它简单得多。

关于swift - 使用 Swift 实时 NSTask 输出到 NSTextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45602532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com