138 lines
3.0 KiB
Go
138 lines
3.0 KiB
Go
|
package main
|
||
|
|
||
|
import "fmt"
|
||
|
import "log"
|
||
|
import "strings"
|
||
|
import "io"
|
||
|
import "os"
|
||
|
import "os/exec"
|
||
|
import "bufio"
|
||
|
|
||
|
/*
|
||
|
func exampleCommand(a string, b ...string) {
|
||
|
// cmd := exec.Command(range myargs)
|
||
|
// args := []string{"/tmp", "/"}
|
||
|
// cmd := exec.Command(args)
|
||
|
cmd := exec.Command(a, b...)
|
||
|
cmd.Stdin = strings.NewReader("foobar")
|
||
|
var out bytes.Buffer
|
||
|
cmd.Stdout = &out
|
||
|
err := cmd.Run()
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
fmt.Println(out.String())
|
||
|
// fmt.Printf("in all caps: %q\n", out.String())
|
||
|
}
|
||
|
|
||
|
func format(mybut *ui.Button) {
|
||
|
log.Println("doButton() mybut =", reflect.ValueOf(mybut).Elem())
|
||
|
log.Println("format and mount here")
|
||
|
exampleCommand("ls", "/tmp")
|
||
|
ping()
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
func ping(hostname string, count int) {
|
||
|
cmdName := "ping " + hostname
|
||
|
cmdArgs := strings.Fields(cmdName)
|
||
|
|
||
|
cmd := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
|
||
|
stdout, _ := cmd.StdoutPipe()
|
||
|
cmd.Start()
|
||
|
// oneByte := make([]byte, 100)
|
||
|
num := 1
|
||
|
for {
|
||
|
/*
|
||
|
_, err := stdout.Read(oneByte)
|
||
|
if err != nil {
|
||
|
fmt.Printf(err.Error())
|
||
|
break
|
||
|
}
|
||
|
*/
|
||
|
r := bufio.NewReader(stdout)
|
||
|
line, _, _ := r.ReadLine()
|
||
|
fmt.Println(string(line))
|
||
|
num = num + 1
|
||
|
if num > count {
|
||
|
os.Exit(0)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
cmd.Wait()
|
||
|
}
|
||
|
|
||
|
func simpleScanner(cmd string) {
|
||
|
log.Println("START " + cmd)
|
||
|
// cmd := exec.Command("ls", "/tmp", "/ballon", "/")
|
||
|
|
||
|
cmdArgs := strings.Fields(cmd)
|
||
|
process := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
|
||
|
stdout, _ := process.StdoutPipe()
|
||
|
stderr, _ := process.StderrPipe()
|
||
|
process.Start()
|
||
|
|
||
|
fmt.Println("start ls /tmp")
|
||
|
|
||
|
merged := io.MultiReader(stderr, stdout)
|
||
|
scanner := bufio.NewScanner(merged)
|
||
|
for scanner.Scan() {
|
||
|
line := scanner.Text()
|
||
|
fmt.Println("NOT " + line) // Println will add back the final '\n'
|
||
|
}
|
||
|
if err := scanner.Err(); err != nil {
|
||
|
// fmt.Fprintln(os.Stderr, "reading standard input:", err)
|
||
|
fmt.Println("reading standard input:", err)
|
||
|
}
|
||
|
log.Println("END " + cmd)
|
||
|
}
|
||
|
|
||
|
func exampleScanner() {
|
||
|
// cmd := exec.Command("ls", "/tmp", "/ballon", "/")
|
||
|
cmd := exec.Command("ls", "/ballon")
|
||
|
stdout, _ := cmd.StdoutPipe()
|
||
|
cmd.Start()
|
||
|
|
||
|
fmt.Println("start ls /tmp")
|
||
|
|
||
|
scanner := bufio.NewScanner(stdout)
|
||
|
for scanner.Scan() {
|
||
|
line := scanner.Text()
|
||
|
fmt.Println("NOT " + line) // Println will add back the final '\n'
|
||
|
}
|
||
|
if err := scanner.Err(); err != nil {
|
||
|
// fmt.Fprintln(os.Stderr, "reading standard input:", err)
|
||
|
fmt.Println("reading standard input:", err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// prompt = whatever you would type at the command line "ls /tmp"
|
||
|
// timeout = number of lines to read in until exit
|
||
|
func stdoutExec(prompt string, timeout int) {
|
||
|
cmdArgs := strings.Fields(prompt)
|
||
|
|
||
|
cmd := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
|
||
|
stdout, _ := cmd.StdoutPipe()
|
||
|
cmd.Start()
|
||
|
// oneByte := make([]byte, 100)
|
||
|
num := 1
|
||
|
for {
|
||
|
/*
|
||
|
_, err := stdout.Read(oneByte)
|
||
|
if err != nil {
|
||
|
fmt.Printf(err.Error())
|
||
|
break
|
||
|
}
|
||
|
*/
|
||
|
r := bufio.NewReader(stdout)
|
||
|
line, _, _ := r.ReadLine()
|
||
|
fmt.Println(string(line))
|
||
|
num = num + 1
|
||
|
if num > timeout {
|
||
|
os.Exit(0)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
cmd.Wait()
|
||
|
}
|