package main import ( "bufio" "flag" "fmt" "os" "os/exec" ) import ( "mailq-inspector/parser" ) var settings = make(map[string]string) func argParse() { inputModePtr := flag.String("inputMode", "stdin", "How to get mailq output. Available options: \"stdin\", 'cmd'") flag.Parse() settings["inputMode"] = *inputModePtr } func main() { argParse() var entries []parser.QEntry var err error if settings["inputMode"] == "stdin" { entries, err = readFromStdin() } else if settings["inputMode"] == "cmd" { entries, err = readFromCmd(exec.Command("mailq")) } else { fmt.Printf("Unsupported inputMode!") flag.PrintDefaults() os.Exit(1) } if err != nil { fmt.Printf("Error reading: %s\n", err.Error()) os.Exit(1) } for _, line := range entries { fmt.Printf("Read: %s", line) } } func readFromStdin() ([]parser.QEntry, error) { scanner := bufio.NewScanner(os.Stdin) return parser.ParseMailQ(scanner) } func readFromCmd(cmd *exec.Cmd) ([]parser.QEntry, error) { stdout, err := cmd.StdoutPipe() err = cmd.Start() scanner := bufio.NewScanner(stdout) result, resErr := parser.ParseMailQ(scanner) err = cmd.Wait() if err != nil { fmt.Printf("Oh no: %s", err.Error()) } return result, resErr }