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()
嗨鮑里斯勒米埃克,感謝您的答覆。在Xen Server內部,我試圖運行'xentop'命令而不是'top'命令。但是對'xentop'命令沒有迴應。另外如何運行Go Lang程序中的另一個二進制文件? –
我不知道Xen Server或者xentop,但是從手冊頁或者'xentop',你應該使用'-b'和'-i'作爲迭代次數。 如果你想在裏面運行一個二進制文件,它是一樣的,只需使用'exec.Command(path_to_binary).Output()':) –