Heim > Backend-Entwicklung > Golang > Wie kann ich erkennen, ob die Eingabe in Go an STDIN weitergeleitet wird?

Wie kann ich erkennen, ob die Eingabe in Go an STDIN weitergeleitet wird?

Patricia Arquette
Freigeben: 2024-12-29 18:27:14
Original
957 Leute haben es durchsucht

How Can I Detect if Input is Piped to STDIN in Go?

Erkennen von Eingaben auf STDIN in Golang

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.

Beispiel

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")
    }
}
Nach dem Login kopieren

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).

Lösung

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")
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage