我想在Linux 64位系统中获取lsblk
命令显示的数据。显然我可以调用lsblk
并解析输出。我的问题是,在Go中有更好的方法吗?
感谢。
答案 0 :(得分:1)
由于lsblk
已经可用且已经完成了您所需的工作(从系统收集信息并将该信息合成到您想要的表格中),我认为使用它是最好的方法。< / p>
lsblk
源代码在此处:https://github.com/karelzak/util-linux/blob/master/misc-utils/lsblk.c。乍一看,就个人而言,这在Go中复制似乎并不重要,并且当util-linux软件包更新时,可能值得解析输出和测试破损的麻烦。
这最终必须根据您的特定标准为您的个别项目做出决定。
答案 1 :(得分:0)
我只需要顶级设备的名称,最后只列出/sys/block
的内容,这很方便,因为它既不需要运行命令,也不需要解析输出。
func GetDevices() []string {
dir, err := ioutil.ReadDir("/sys/block")
if err != nil {
panic(err)
}
files := make([]string, 0)
for _, f := range dir {
if strings.HasPrefix(f.Name(), "loop") {
continue
}
files = append(files, f.Name())
}
return files
}
既不是非常健壮的解决方案,也不是便携式解决方案,但是可以满足我的需求。
您还可以构想解析/proc/diskstats
或/proc/partitions
的内容。