Heim > Backend-Entwicklung > Golang > Empfängt mein Go-Befehl Daten von einer Pipe?

Empfängt mein Go-Befehl Daten von einer Pipe?

Mary-Kate Olsen
Freigeben: 2024-11-05 03:27:02
Original
769 Leute haben es durchsucht

Is My Go Command Receiving Data from a Pipe?

Wie stellt man fest, ob ein Befehl in Go weitergeleitet wird?

Bei der Arbeit mit Eingabe und Ausgabe in Go ist es oft notwendig, festzustellen, ob ob ein Befehl weitergeleitet wird oder nicht. Durch Piping können Daten über eine Unix-Pipe von der Ausgabe eines Prozesses an die Eingabe eines anderen Prozesses übergeben werden.

Zum Beispiel:

<code class="sh">cat test.txt | mygocommand # Piped
mygocommand # Not piped</code>
Nach dem Login kopieren

Diese Unterscheidung kann für die Anpassung des Verhaltens Ihrer Anwendung wichtig sein .

Lösung

Go bietet eine Möglichkeit, mithilfe von os.Stdin.Stat() zu überprüfen, ob stdin weitergeleitet wird. Hier ist ein Beispiel:

<code class="go">package main

import (
    "fmt"
    "os"
)

func main() {
    fi, _ := os.Stdin.Stat()

    if (fi.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is from pipe")
    } else {
        fmt.Println("data is from terminal")
    }
}</code>
Nach dem Login kopieren

Wenn der Befehl weitergeleitet wird (wie im ersten Beispiel), lautet die Ausgabe:

data is from pipe
Nach dem Login kopieren

Andernfalls lautet sie:

data is from terminal
Nach dem Login kopieren

So funktioniert es

Die Funktion os.Stdin.Stat() gibt ein FileInfo-Objekt zurück, das Informationen über den stdin-Dateideskriptor enthält. Die Mode()-Methode von FileInfo gibt einen Dateimodus zurück, der Informationen über den Dateityp enthält. Wenn der zurückgegebene Modus das Flag os.ModeCharDevice enthält, zeigt dies an, dass es sich bei der Datei um ein Zeichengerät, z. B. ein Terminal, handelt. Ist dies nicht der Fall, weist dies darauf hin, dass es sich bei der Datei um eine reguläre Datei oder eine Pipe handelt.

Das obige ist der detaillierte Inhalt vonEmpfängt mein Go-Befehl Daten von einer Pipe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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