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
Libérer: 2024-12-29 18:27:14
original
940 Les gens l'ont consulté

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

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

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