[解決済み] Goで複数のコマンドをパイプでつなぐには?
2023-06-02 17:51:23
質問
Go で複数の外部コマンドをパイプでつなぐにはどうしたらよいでしょうか。このコードを試しましたが、次のようなエラーが発生しました。
exit status 1
.
package main
import (
"io"
"log"
"os"
"os/exec"
)
func main() {
c1 := exec.Command("ls")
stdout1, err := c1.StdoutPipe()
if err != nil {
log.Fatal(err)
}
if err = c1.Start(); err != nil {
log.Fatal(err)
}
if err = c1.Wait(); err != nil {
log.Fatal(err)
}
c2 := exec.Command("wc", "-l")
c2.Stdin = stdout1
stdout2, err := c2.StdoutPipe()
if err != nil {
log.Fatal(err)
}
if err = c2.Start(); err != nil {
log.Fatal(err)
}
if err = c2.Wait(); err != nil {
log.Fatal(err)
}
io.Copy(os.Stdout, stdout2)
}
どのように解決するのですか?
<ブロッククオートStdoutPipeは、コマンドの起動時にコマンドの標準出力に接続されるパイプを返します。 に接続されるパイプを返します。このパイプは Waitがコマンドの終了を確認した後、自動的に閉じられます。
(以下 http://golang.org/pkg/os/exec/#Cmd.StdinPipe )
を行うということは
c1.Wait
を閉じる。
stdoutPipe
.
動作する例を作ってみました(単なるデモです、エラーキャッチを追加してください!) :
package main
import (
"bytes"
"io"
"os"
"os/exec"
)
func main() {
c1 := exec.Command("ls")
c2 := exec.Command("wc", "-l")
r, w := io.Pipe()
c1.Stdout = w
c2.Stdin = r
var b2 bytes.Buffer
c2.Stdout = &b2
c1.Start()
c2.Start()
c1.Wait()
w.Close()
c2.Wait()
io.Copy(os.Stdout, &b2)
}
関連
-
[解決済み] 標準出力ではなく標準エラー出力にパイプを通すにはどうしたらいいですか?
-
[解決済み] Goでマップにキーが含まれているかどうかを確認するには?
-
[解決済み] goで文字列の連結を効率的に行う方法
-
[解決済み] Bashでパイプ出力と終了ステータスをキャプチャする
-
[解決済み】シェルスクリプトがパイプを介して実行されているかどうかを検出するにはどうすればよいですか?
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
-
[解決済み] ユーザーのホームディレクトリを取得する
-
[解決済み] go ウェブサーバーを使って静的な html ファイルを提供するにはどうすればよいですか?
-
[解決済み] 遅延呼び出しに対応した囲碁プログラムを終了させるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] GoのToString()関数
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
-
[解決済み] Goで関数の名前を取得するには?
-
[解決済み] os.Exit()とpanic()はいつ使うのか?
-
[解決済み] sync.WaitGroupの例は正しいですか?
-
[解決済み] golangにおけるバックティック(``)とダブルクォート("")の違いは何ですか?
-
[解決済み] go ウェブサーバーを使って静的な html ファイルを提供するにはどうすればよいですか?
-
[解決済み] gc」と「gccgo」の主な相違点は何ですか?
-
[解決済み] IntelliJでファイル保存時にgofmtを実行する
-
[解決済み] Go で要件をインストールするにはどうすればよいですか? "パッケージが見つかりません"