Heim > Backend-Entwicklung > Golang > Wie kann ich erkennen, ob die STDIN-Eingabe von Go von einer Pipe oder einem Terminal stammt?

Wie kann ich erkennen, ob die STDIN-Eingabe von Go von einer Pipe oder einem Terminal stammt?

Mary-Kate Olsen
Freigeben: 2024-12-15 10:26:15
Original
496 Leute haben es durchsucht

How Can I Detect if Go's STDIN Input is from a Pipe or a Terminal?

Ermitteln der STDIN-Datenverfügbarkeit in Go

In Ihrem Code möchten Sie unterscheiden, wann Daten an STDIN weitergeleitet werden und wann sie ausgeführt werden von einem Terminal aus. Die Herausforderung besteht darin, die blockierende Natur von ioutil.ReadAll() anzugehen, das unbegrenzt auf Eingaben wartet, wenn STDIN leer ist.

Lösung: Verwendung von os.ModeCharDevice

Zu Um dieses Problem zu lösen, können wir os.ModeCharDevice nutzen, um festzustellen, ob STDIN einem Terminal oder einer Pipe zugeordnet ist. So geht's:

package main

import (
    "fmt"
    "os"
)

func main() {
    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

Erklärung:

  • stat, _ := os.Stdin.Stat(): Ruft die Dateiinformationen für STDIN ab.
  • if (stat.Mode() & os.ModeCharDevice) == 0: Prüft wenn im STDIN-Dateimodus das os.ModeCharDevice-Bit nicht gesetzt ist.

    • Wenn STDIN eine Pipe ist, ist in ihrem Modus normalerweise nicht das os.ModeCharDevice-Bit gesetzt.
    • Wenn STDIN ein Terminal ist, hat sein Modus normalerweise das os.ModeCharDevice-Bit gesetzt.
  • Basierend auf dieser Prüfung gibt das Programm die entsprechende Meldung aus, die angibt, ob Daten an STDIN weitergeleitet oder von einem Terminal ausgeführt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich erkennen, ob die STDIN-Eingabe von Go von einer Pipe oder einem Terminal stammt?. 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