如何在Go中以交互方式执行流程?

问题描述

我正在OSX上执行命令-在我的情况下为fs_usage-与通过管道传输到文件时相比,通过终端运行时其输出不同。

例如,同时以sudo身份运行,以下两个命令将产生不同的输出

这是我想要的输出

$ sudo fs_usage -f diskio 0

这会产生不同的输出,我不想要

$ sudo fs_usage -f diskio 0 > out.txt

然后,我尝试在Go中模拟前者并在程序中处理输出。以下代码未给出预期的结果(它输出非交互式,修改后的输出):

    cmd := exec.Command("fs_usage","-f","diskio","0")

    stdout,err := cmd.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }

    err = cmd.Start()
    if err != nil {
        log.Fatal(err)
    }

    scanner := bufio.NewScanner(stdout)
    scanner.Split(bufio.ScanLines)
    for scanner.Scan() {
        line := scanner.Text()
        fmt.Println(line)
    }

但是,此代码确实打印了预期的结果:

    cmd := exec.Command("fs_usage","0")
    cmd.Stdout = os.Stdout
    cmd.Start()
    cmd.Wait()

那么,我想要的是第二个示例的行为,但是能够逐行读取该输入或遍历字节片。我该怎么做?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)