吴小白 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
..
.gitignore e5d28115ee vendor: regenerate há 3 anos atrás
Dockerfile.golang 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
Dockerfile.riscv 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
LICENSE 0595c01718 switch kr/pty to creack/pty v1.1.7 há 6 anos atrás
README.md 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
asm_solaris_amd64.s 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
doc.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ioctl.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ioctl_bsd.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ioctl_solaris.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ioctl_unsupported.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
mktypes.bash 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_darwin.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_dragonfly.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_freebsd.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_linux.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_netbsd.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_openbsd.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_solaris.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
pty_unsupported.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
run.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
start.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
start_windows.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
test_crosscompile.sh 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
winsize.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
winsize_unix.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
winsize_unsupported.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_386.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_amd64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_arm.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_arm64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_dragonfly_amd64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_freebsd_386.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_freebsd_amd64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_freebsd_arm.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_freebsd_arm64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_freebsd_ppc64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_loong64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_mipsx.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_netbsd_32bit_int.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_openbsd_32bit_int.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_ppc64.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_ppc64le.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_riscvx.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás
ztypes_s390x.go 4876c09b2a build(deps): bump github.com/creack/pty from v1.1.11 to v1.1.18 há 2 anos atrás

README.md

pty

Pty is a Go package for using unix pseudo-terminals.

Install

go get github.com/creack/pty

Examples

Note that those examples are for demonstration purpose only, to showcase how to use the library. They are not meant to be used in any kind of production environment.

Command

package main

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

	"github.com/creack/pty"
)

func main() {
	c := exec.Command("grep", "--color=auto", "bar")
	f, err := pty.Start(c)
	if err != nil {
		panic(err)
	}

	go func() {
		f.Write([]byte("foo\n"))
		f.Write([]byte("bar\n"))
		f.Write([]byte("baz\n"))
		f.Write([]byte{4}) // EOT
	}()
	io.Copy(os.Stdout, f)
}

Shell

package main

import (
        "io"
        "log"
        "os"
        "os/exec"
        "os/signal"
        "syscall"

        "github.com/creack/pty"
        "golang.org/x/term"
)

func test() error {
        // Create arbitrary command.
        c := exec.Command("bash")

        // Start the command with a pty.
        ptmx, err := pty.Start(c)
        if err != nil {
                return err
        }
        // Make sure to close the pty at the end.
        defer func() { _ = ptmx.Close() }() // Best effort.

        // Handle pty size.
        ch := make(chan os.Signal, 1)
        signal.Notify(ch, syscall.SIGWINCH)
        go func() {
                for range ch {
                        if err := pty.InheritSize(os.Stdin, ptmx); err != nil {
                                log.Printf("error resizing pty: %s", err)
                        }
                }
        }()
        ch <- syscall.SIGWINCH // Initial resize.
        defer func() { signal.Stop(ch); close(ch) }() // Cleanup signals when done.

        // Set stdin in raw mode.
        oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
        if err != nil {
                panic(err)
        }
        defer func() { _ = term.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort.

        // Copy stdin to the pty and the pty to stdout.
        // NOTE: The goroutine will keep reading until the next keystroke before returning.
        go func() { _, _ = io.Copy(ptmx, os.Stdin) }()
        _, _ = io.Copy(os.Stdout, ptmx)

        return nil
}

func main() {
        if err := test(); err != nil {
                log.Fatal(err)
        }
}