第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用Swift將NSTask實(shí)時(shí)輸出到NSTextView

使用Swift將NSTask實(shí)時(shí)輸出到NSTextView

三國紛爭 2019-12-04 15:20:05
我正在使用NSTask運(yùn)行rsync,并且希望狀態(tài)顯示在窗口內(nèi)滾動(dòng)視圖的文本視圖中。現(xiàn)在我有這個(gè):let pipe = NSPipe()task2.standardOutput = pipetask2.launch()let data = pipe.fileHandleForReading.readDataToEndOfFile()let output: String = NSString(data: data, encoding: NSASCIIStringEncoding)! as StringtextView.string = output這就是我有關(guān)傳輸?shù)囊恍┙y(tǒng)計(jì)信息,但是我想實(shí)時(shí)獲取輸出,例如在Xcode中運(yùn)行該應(yīng)用程序并將其放入文本視圖時(shí)所打印的內(nèi)容。有沒有辦法做到這一點(diǎn)?
查看完整描述

3 回答

?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用通知從管道異步讀取。這是一個(gè)演示其工作原理的簡單示例,希望可以幫助您入門:


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.waitForDataInBackgroundAndNotify()


var obs1 : NSObjectProtocol!

obs1 = NSNotificationCenter.defaultCenter().addObserverForName(NSFileHandleDataAvailableNotification,

    object: outHandle, queue: nil) {  notification -> Void in

        let data = outHandle.availableData

        if data.length > 0 {

            if let str = NSString(data: data, encoding: NSUTF8StringEncoding) {

                print("got output: \(str)")

            }

            outHandle.waitForDataInBackgroundAndNotify()

        } else {

            print("EOF on stdout from process")

            NSNotificationCenter.defaultCenter().removeObserver(obs1)

        }

}


var obs2 : NSObjectProtocol!

obs2 = NSNotificationCenter.defaultCenter().addObserverForName(NSTaskDidTerminateNotification,

    object: task, queue: nil) { notification -> Void in

        print("terminated")

        NSNotificationCenter.defaultCenter().removeObserver(obs2)

}


task.launch()

而是print("got output: \(str)")可以將接收到的字符串附加到文本視圖中。


上面的代碼假定運(yùn)行循環(huán)處于活動(dòng)狀態(tài)(在默認(rèn)的Cocoa應(yīng)用程序中就是這種情況)。


查看完整回答
反對(duì) 回復(fù) 2019-12-04
?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

從macOS 10.7開始,還有一個(gè)readabilityHandler屬性NSPipe,您可以在該屬性上設(shè)置何時(shí)有新數(shù)據(jù)可用的回調(diào):


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()

我很驚訝沒有人提到這件事,因?yàn)樗唵蔚枚唷?/p>


查看完整回答
反對(duì) 回復(fù) 2019-12-04
  • 3 回答
  • 0 關(guān)注
  • 1035 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)