ホームページ  >  記事  >  バックエンド開発  >  Go でコマンドがパイプされているかどうかを検出するにはどうすればよいですか?

Go でコマンドがパイプされているかどうかを検出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-05 02:23:02210ブラウズ

How can I detect if a command is being piped in Go?

Go でパイプされたコマンドを検出する

Go でコマンドを実行するとき、コマンドがパイプされているかどうかを判断する必要がある場合があります。 。パイプされたコマンドは、別のコマンドまたはソースからのデータを標準入出力ストリーム経由で直接処理する場合に便利です。

os.Stdin.Stat() によるパイプされたコマンドの検出

コマンドがパイプされているかどうかを検出するには、os.Stdin.Stat() メソッドを使用して標準入力ストリームのモードを調べることができます。 Stat() メソッドは、ファイルのモードなどのさまざまな情報を含む os.FileInfo 構造体を返します。

例:

<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>

この例では、 os.ModeCharDevice 定数は、標準入力のモードがキャラクタ デバイスであるかどうかを確認するために使用されます。そうでない場合、データはパイプから来ていると推測できます。逆に、モードがキャラクタ デバイスの場合、データは端末から送信されます。

仕組み:

コマンドがパイプされると、標準入力がstream は別のコマンドの出力ストリームに接続されます。これにより、標準入力ストリームのモードがキャラクタ デバイス モードではなくパイプ モードに変更されます。標準入力ストリームのモードを調べることで、コマンドがパイプされているかどうかを判断できます。

アプリケーション:

パイプされたコマンドの検出は、次のようなさまざまなシナリオで役立ちます。として:

  • パイプされているかどうかに基づいてコマンドの動作を制御します。
  • 入力ソースに応じて、異なるエラー メッセージや使用方法を提供します。
  • さまざまな入力シナリオに合わせてコードを最適化します。

以上がGo でコマンドがパイプされているかどうかを検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。