gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 22:19:28 24 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: NSUTF8StringEncoding) {
// 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/29548811/

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