【发布时间】:2019-07-29 22:22:20
【问题描述】:
我想要一个在 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 中逐行打印。
【问题讨论】: