我想要一个在 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 关注
- 73 浏览
添加回答
举报
0/150
提交
取消