Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengesan jika Input STDIN Go adalah daripada Paip atau Terminal?

Bagaimanakah Saya Boleh Mengesan jika Input STDIN Go adalah daripada Paip atau Terminal?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-15 10:26:15498semak imbas

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

Mengesan Ketersediaan Data STDIN dalam Go

Dalam kod anda, anda bertujuan untuk membezakan antara apabila data disalurkan ke STDIN dan apabila ia dilaksanakan daripada terminal. Cabarannya terletak pada menangani sifat menyekat ioutil.ReadAll(), yang menunggu input selama-lamanya apabila STDIN kosong.

Penyelesaian: Menggunakan os.ModeCharDevice

Untuk menyelesaikan isu ini, kami boleh memanfaatkan os.ModeCharDevice untuk menentukan sama ada STDIN dikaitkan dengan terminal atau paip. Begini caranya:

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

Penjelasan:

  • stat, _ := os.Stdin.Stat(): Mendapatkan semula maklumat fail untuk STDIN.
  • jika (stat.Mode() & os.ModeCharDevice) == 0: Semak sama ada mod fail STDIN tidak mempunyai set bit os.ModeCharDevice.

    • Jika STDIN ialah paip, modnya biasanya tidak mempunyai set bit os.ModeCharDevice.
    • Jika STDIN ialah terminal, modnya biasanya mempunyai bit os.ModeCharDevice ditetapkan.
  • Berdasarkan semakan ini, atur cara mencetak mesej yang sesuai, menunjukkan sama ada data sedang disalurkan ke STDIN atau jika ia dilaksanakan daripada terminal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan jika Input STDIN Go adalah daripada Paip atau Terminal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn