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
Mary-Kate OlsenOriginal
2024-11-05 03:27:02756Durchsuche

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>

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>

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

data is from pipe

Andernfalls lautet sie:

data is from terminal

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!

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