ホームページ > バックエンド開発 > Golang > Go の「exec.Command()」を使用してパイプされたコマンドを効果的に実行する方法?

Go の「exec.Command()」を使用してパイプされたコマンドを効果的に実行する方法?

Barbara Streisand
リリース: 2024-12-15 20:36:11
オリジナル
946 人が閲覧しました

How to Execute Piped Commands Effectively Using Go's `exec.Command()`?

Go の exec.Command() を使用したパイプされたコマンドの実行

exec.Command() を使用してコマンドを実行すると、パイプを含むコマンドを実行できるため、次のことが可能になります。複数のコマンドを連鎖させます。

たとえば、次のコマンドは ps cax を実行し、成功します:

out, err := exec.Command("ps", "cax").Output()
ログイン後にコピー

ただし、次のコマンドを使用して ps cax の出力を grep myapp にパイプしようとすると失敗します:

out, err := exec.Command("ps", "cax | grep myapp").Output()
ログイン後にコピー

この問題を解決するには、より慣用的な方法を採用できます。 Go でパイプを使用したアプローチ:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    grep := exec.Command("grep", "redis")
    ps := exec.Command("ps", "cax")

    // Connect ps's stdout to grep's stdin.
    pipe, _ := ps.StdoutPipe()
    defer pipe.Close()

    grep.Stdin = pipe

    // Start ps first.
    ps.Start()

    // Run and retrieve the output of grep.
    res, _ := grep.Output()

    fmt.Println(string(res))
}
ログイン後にコピー

この例では、2 つの exec.Cmd を作成します。コマンドごとに 1 つずつ構造体を作成し、ps の stdout と grep の stdin の間にパイプを確立します。最初に ps を開始することで、その出力を grep が使用できるようにします。次に、grep を実行してその出力を取得し、2 つのコマンドを効果的に連鎖させます。

以上がGo の「exec.Command()」を使用してパイプされたコマンドを効果的に実行する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート