Bei der Entwicklung von Befehlszeilendienstprogrammen ist es oft notwendig, zwischen Eingaben zu unterscheiden, die von einem anderen Programm weitergeleitet oder interaktiv eingegeben werden. In diesem Artikel geht es darum, wie man prüft, ob Daten auf STDIN in Go vorhanden sind.
Betrachten Sie den folgenden Code:
package main import ( "fmt" "io/ioutil" "os" ) func main() { bytes, _ := ioutil.ReadAll(os.Stdin) if len(bytes) > 0 { fmt.Println("Something on STDIN: " + string(bytes)) } else { fmt.Println("Nothing on STDIN") } }
Beim Aufruf mit weitergeleiteter Eingabe (z. B. echo foo |. go run test.go), dieser Code identifiziert die Eingabe korrekt. Wenn das Programm jedoch interaktiv (ohne weitergeleitete Eingaben) aufgerufen wird, wartet es unbegrenzt bei ioutil.ReadAll(os.Stdin).
Um zwischen weitergeleiteten und nicht weitergeleiteten Eingaben zu unterscheiden, verwenden Sie os .ModeCharDevice. Dieser Modus identifiziert, ob die Eingabe von einem Terminal stammt oder nicht. Wenn es nicht von einem Terminal kommt, ist es wahrscheinlich eine Weiterleitung.
stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { fmt.Println("data is being piped to stdin") } else { fmt.Println("stdin is from a terminal") }
Das obige ist der detaillierte Inhalt vonWie kann ich erkennen, ob die Eingabe in Go an STDIN weitergeleitet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!