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
Patricia ArquetteOriginal
2024-12-29 18:27:14966Durchsuche

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

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

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!

Stellungnahme:
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