func/vendor/github.com/Netflix/go-expect
Markus Thömmes 94e49eb3cd
Vendor dependencies (#531)
* Vendor dependencies

* Update pkger again

* Roll back go.sum changes
2021-09-16 04:42:39 -07:00
..
.travis.yml Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
LICENSE Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
OSSMETADATA Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
README.md Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
console.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
doc.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
expect.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
expect_opt.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
go.mod Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
go.sum Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
passthrough_pipe.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
reader_lease.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
test_log.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00

README.md

go-expect

Go Build Status GoDoc NetflixOSS Lifecycle

Package expect provides an expect-like interface to automate control of applications. It is unlike expect in that it does not spawn or manage process lifecycle. This package only focuses on expecting output and sending input through it's pseudoterminal.

Usage

os.Exec example

package main

import (
	"log"
	"os"
	"os/exec"
	"time"

	expect "github.com/Netflix/go-expect"
)

func main() {
	c, err := expect.NewConsole(expect.WithStdout(os.Stdout))
	if err != nil {
		log.Fatal(err)
	}
	defer c.Close()

	cmd := exec.Command("vi")
	cmd.Stdin = c.Tty()
	cmd.Stdout = c.Tty()
	cmd.Stderr = c.Tty()

	go func() {
		c.ExpectEOF()
	}()

	err = cmd.Start()
	if err != nil {
		log.Fatal(err)
	}

	time.Sleep(time.Second)
	c.Send("iHello world\x1b")
	time.Sleep(time.Second)
	c.Send("dd")
	time.Sleep(time.Second)
	c.SendLine(":q!")

	err = cmd.Wait()
	if err != nil {
		log.Fatal(err)
	}
}

golang.org/x/crypto/ssh/terminal example

package main

import (
	"fmt"

	"golang.org/x/crypto/ssh/terminal"

	expect "github.com/Netflix/go-expect"
)

func getPassword(fd int) string {
	bytePassword, _ := terminal.ReadPassword(fd)

	return string(bytePassword)
}

func main() {
	c, _ := expect.NewConsole()

	defer c.Close()

	donec := make(chan struct{})
	go func() {
		defer close(donec)
		c.SendLine("hunter2")
	}()

	echoText := getPassword(int(c.Tty().Fd()))

	<-donec

	fmt.Printf("\nPassword from stdin: %s", echoText)
}