s := fmt.Sprintf(`"top -bn2 | fgrep 'Cpu(s)' | tail -1"`, host) 
log.Printf("top = %s\n", s) 
cmd := exec.Command("bash", "-c", s) 
b, e := cmd.Output() 
if e != nil { 
    log.Printf("failed due to :%v\n", e) 
    panic(e) 
} 
log.Printf("%v\n", string(b)) 
raw := string(b) 

这就是你可能会做,如果你打算在批处理模式上运行。如果你想选择最后一个,而不是捕获所有内容,注意尾部-1也许是有价值的,而如果你要为特定的字段grep,fgrep会很有用 - 但是这不是必须的。

仅供参考,以下是运行top的其他方法。

c := exec.Command("top") 
c.Stdin = os.Stdin 
c.Stdout = os.Stdout 
c.Stderr = os.Stderr 
c.Run() 

这是为本地。如果要启动服务器

c := exec.Command("ssh", "-t", "localhost", "top") 
c.Stdin = os.Stdin 
c.Stdout = os.Stdout 
c.Stderr = os.Stderr 
c.Run() 

,并连接为通过Telnet客户端和顶部远程运行使用,当在上面的命令远程登录屏幕结果显示(常见的情况 - 如果您通过SSH看,使用这个去反思服务器可能)使用此 -

 


    func main() { 
     l, _ := net.Listen("tcp", "127.0.0.1:12345") 
     for { 
      c, _ := l.Accept() 
      go func() { 
       handle(&c) 
      }() 
     } 
    } 
    func handle(c *net.Conn) { 
     cmd := exec.Command("top") 
     cstdout, _ := cmd.StdoutPipe() 
     go io.Copy(bufio.NewWriter(*c), bufio.NewReader(cstdout)) 
     cmd.Run() 
    } 

 

如果您正在使用Telnet和SSH运行像应用通用命令使用这个库建设终端 - https://github.com/kr/pty

编辑打算让它更好......这是一个适用于PTY的例子,场景是如果你使用ssh -t来运行一个命令,想从这个服务器类型设置中与telneting进行交互,例如顶部使用此:

 


     cmd := exec.Command("ssh", "-t", "localhost", "top") 
     f, _ := pty.Start(cmd) 
     go io.Copy(bufio.NewWriter(*c), f) 
     go io.Copy(f, bufio.NewReader(*c)) 
     go io.Copy(bufio.NewWriter(*c), os.Stdin) 
     cmd.Run()