如何使用Golang获得tty大小?我正在尝试通过执行stty size命令来执行此操作,但是我无法正确编写代码。
stty size
package main import ( "os/exec" "fmt" "log" ) func main() { out, err := exec.Command("stty", "size").Output() fmt.Printf("out: %#v\n", out) fmt.Printf("err: %#v\n", err) if err != nil { log.Fatal(err) } }
输出:
out: []byte{} err: &exec.ExitError{ProcessState:(*os.ProcessState)(0xc200066520)} 2013/05/16 02:35:57 exit status 1 exit status 1
我认为这是因为Go产生了一个与当前tty无关的进程,该进程正在使用该进程。如何将命令与当前终端相关联以获取其大小?
如果您给子进程授予对父进程的访问权限,则它可以工作stdin:
stdin
package main import ( "os/exec" "fmt" "log" "os" ) func main() { cmd := exec.Command("stty", "size") cmd.Stdin = os.Stdin out, err := cmd.Output() fmt.Printf("out: %#v\n", string(out)) fmt.Printf("err: %#v\n", err) if err != nil { log.Fatal(err) } }
产量:
out: "36 118\n" err: <nil>