Skip to main content
  1. Tutorial/

PTY Command Usage

110 words·1 min
Golang
Table of Contents

PTY command usage
#

Go执行python脚本,异步读取输出,但是无法实时生成输出信息,有些许延迟

  1. 强制命令实时输出:某些命令支持参数或环境变量来禁用输出缓冲。例如,python的-u选项或强制stdbufunbuffer工具在命令前使用,可以减少或消除输出缓冲。

  2. 使用pty(伪终端):另一个解决方案是使用伪终端(pty)来执行命令。许多命令会检测它们是否直接与终端连接,并在是的情况下禁用或减少输出缓冲。使用pty库来启动命令,命令就会认为它直接与终端连接,可能会更频繁地刷新其输出。

安装 go get github.com/creack/pty

package main

import (
    "fmt"
    "io"
    "os"
    "os/exec"

    "github.com/creack/pty"
)

func main() {
    cmd := exec.Command("bash", "-c", "command")

    // Using the pty start command
    f, err := pty.Start(cmd)
    if err != nil {
        panic(err)
    }
    defer f.Close()

    // Create a goroutine to read the output.
    go func() {
        buf := make([]byte, 1024)
        for {
            n, err := f.Read(buf)
            if err != nil {
                if err != io.EOF {
                    fmt.Fprintln(os.Stderr, "read error:", err)
                }
                return
            }
            fmt.Print(string(buf[:n]))
        }
    }()

    // Wait for command execution to complete
    err = cmd.Wait()
    if err != nil {
        fmt.Fprintln(os.Stderr, "command error:", err)
    }
}

Related

Go Version Manager (GVM)
88 words·1 min
Golang
GVM(Go Version Manager)是一款用于管理和切换不同Go语言版本的工具 Install # bash < <(curl -s -S -L https://raw.
50 Shades of Go
11898 words·56 mins
Golang
50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs # Traps, Gotchas, and Common Mistakes # level: beginner In most other languages that use braces you get to choose where you place them.
内存对齐-fieldalignment
33 words·1 min
Golang
fieldalignment # Install
简单实现QPS计算
280 words·2 mins
Golang
Simple QPS # 实现一个简单的QPS(每秒查询率)测试。
数据结构&控制结构实现原理
564 words·3 mins
Golang
Map 扩容条件与操作原理 # 负载因子 > 6.