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