Maison > développement back-end > Golang > Comment puis-je détecter si l'entrée STDIN de Go provient d'un tuyau ou d'un terminal ?

Comment puis-je détecter si l'entrée STDIN de Go provient d'un tuyau ou d'un terminal ?

Mary-Kate Olsen
Libérer: 2024-12-15 10:26:15
original
494 Les gens l'ont consulté

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

Détection de la disponibilité des données STDIN dans Go

Dans votre code, vous souhaitez faire la distinction entre le moment où les données sont acheminées vers STDIN et le moment où elles sont exécutées depuis un terminal. Le défi consiste à résoudre la nature bloquante de ioutil.ReadAll(), qui attend indéfiniment une entrée lorsque STDIN est vide.

Solution : Utiliser os.ModeCharDevice

Pour Pour résoudre ce problème, nous pouvons exploiter os.ModeCharDevice pour déterminer si STDIN est associé à un terminal ou à un canal. Voici comment :

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")
    }
}
Copier après la connexion

Explication :

  • stat, _ := os.Stdin.Stat() : récupère les informations de fichier pour STDIN.
  • if (stat.Mode() & os.ModeCharDevice) == 0 : Vérifie si le STDIN le mode fichier n'a pas le bit os.ModeCharDevice défini.

    • Si STDIN est un tube, son mode n'aura pas le bit os.ModeCharDevice défini.
    • Si STDIN est un terminal, son mode aura généralement le bit os.ModeCharDevice set.
  • Sur la base de cette vérification, le programme imprime le message approprié, indiquant si les données sont acheminées vers STDIN ou si elles sont exécutées à partir d'un terminal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal