我想要一個在 Linux 上獲取目錄條目的函數。我用過ioutil.ReadDir,通常速度很快。但是如果我想讀取一些已安裝的虛擬文件系統/run/user/1000/gvfs/,這個功能就會變得很慢。如果目錄中有很多文件條目,我需要等待很長時間。我可以ls在終端中使用該命令,結果將是相同的。當我嘗試時,ls -U -a -p -1我立即得到了逐行輸出。我嘗試在 Go 中運行它exec.Command,但它不能異步工作。Go 正在等待完整的程序輸出。我做錯了什么?m.cmd = exec.Command("ls", "-U", "-a", "-p", "-1")// for example some "slow" directory:m.cmd.Dir = "/run/user/1000/gvfs/dav:host=webdav.yandex.ru,ssl=true,user=...../"?reader, _ := m.cmd.StdoutPipe()bufReader := bufio.NewReader(reader)go func() {? m.cmd.Start()? for {? ? line, _, err := bufReader.ReadLine()? ? if err != nil {? ? ? break? ? }? ? linestr := string(line)? ? if linestr != "./" && linestr != "../" {? ? ? fmt.Println(linestr)? ? }? }}()我需要立即在 Go 中逐行打印。
1 回答

FFIVE
TA貢獻1797條經驗 獲得超6個贊
嘗試ls -U -a -p 1 | cat
查看是否獲得逐行輸出。
Go 無法控制ls
;如果選擇這樣做,ls
則進行逐行寫入,如果其輸出是管道,則選擇不這樣做。您可以分配一個 pty 對并使用它,但這是錯誤的方法。ls
ls
ioutil.ReadDir
首先讀取整個目錄(通過調用Readdir(-1)
),然后對文件名進行排序。如果您使用os.Open
打開目錄,然后使用一個?。ǖ皇秦摚底终{用Readdir
or函數,您應該會得到更符合您喜好的東西。
- 1 回答
- 0 關注
- 95 瀏覽
添加回答
舉報
0/150
提交
取消