怎么跟咕噜一起穿tty尺码呢?我正在try 执行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:

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)
  }
}

yields :

out: "36 118\n"
err: <nil>

Go相关问答推荐

迭代项列表时如何超时并发调用

SEARCH On Conflict Clause不考虑乐观锁定版本

Go汇编器命名为Constants

try 用GitHub操作中的release标签更新version. go文件,但失败了

Golang Viper:如果第一个字段不存在,如何从另一个字段获取值

如何在围棋中从多部分.Part中获取多部分.文件而不保存到磁盘?

埃拉托塞尼筛:加快交叉关闭倍数步骤

如何执行asn 1 marshal/unmarshal和omit字段?

将DATE类型的SQL字段扫描到GO struct 字段

golang regex基于关键字拆分字符串

Json.Unmarshal() 和 gin.BindJson() 之间的区别

Golang和Gin web框架在router.Run()之后执行代码

杜松子wine 和中间件

在两个单独的速率受限端点之间同步请求

确保 Go 1.20 编译时的严格可比性?

从 Makefile 运行时权限被拒绝

合并几千万文件最快的方法是什么

无法在 GORM 中排序

Go Flag 用法 描述 包含 Word 值

Go:为一组单个结果实现 ManyDecode