Maison >développement back-end >Golang >Comment puis-je détecter si l'entrée est redirigée vers STDIN dans Go ?

Comment puis-je détecter si l'entrée est redirigée vers STDIN dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-29 18:27:14959parcourir

How Can I Detect if Input is Piped to STDIN in Go?

Détection des entrées sur STDIN dans Golang

Lors du développement d'utilitaires de ligne de commande, il est souvent nécessaire de faire la distinction entre les entrées provenant d'un autre programme ou entrées de manière interactive. Cet article explique comment vérifier si des données sont présentes sur STDIN dans Go.

Exemple

Considérez le code suivant :

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

Lorsqu'il est invoqué avec une entrée canalisée (par exemple, echo foo | go run test.go), ce code identifie correctement l'entrée. Cependant, s'il est appelé de manière interactive (sans entrée redirigée), le programme attend indéfiniment ioutil.ReadAll (os.Stdin).

Solution

Pour différencier les entrées redirigées et non redirigées, utilisez os .ModeCharDevice. Ce mode identifie si l'entrée provient d'un terminal ou non. Si cela ne provient pas d'un terminal, cela vient probablement d'un canal.

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

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!

Déclaration:
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