Rumah > pembangunan bahagian belakang > Golang > Mengapa Perintah Paip dalam `exec.Command()` Go Gagal dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Perintah Paip dalam `exec.Command()` Go Gagal dan Bagaimana Saya Boleh Membetulkannya?

Susan Sarandon
Lepaskan: 2024-12-16 11:03:14
asal
118 orang telah melayarinya

Why Does Piping Commands in Go's `exec.Command()` Fail, and How Can I Fix It?

Melaksanakan Perintah Paip dalam Go Menggunakan exec.Command()

S: Perintah Paip Gagal dengan Status Keluar 1

Apabila cuba menghantar arahan menggunakan exec.Command(), ralat berikut berlaku:

ps, "cax | grep myapp"
Salin selepas log masuk

Mengapa arahan ini gagal semasa ps cax berfungsi?

A: Idiomatic Piping with exec.Command()

Lulus keseluruhan arahan untuk bash boleh menyelesaikan masalah itu, tetapi ada yang lebih idiomatik penyelesaian:

  1. Buat perintah berasingan untuk setiap langkah (ps dan grep).
  2. Sambungkan input dan output standard mereka menggunakan paip.
  3. Laksanakan ps dahulu, kemudian grep .

Kod Contoh:

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

    // Run ps first.
    ps.Start()

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

    fmt.Println(string(res))
}
Salin selepas log masuk

Penjelasan:

  • grep dan ps dicipta sebagai arahan berasingan.
  • Paip dicipta daripada stdout ps kepada stdin grep.
  • ps dimulakan dahulu, memastikan bahawa outputnya tersedia untuk grep.
  • grep kemudiannya dilaksanakan dan outputnya diperoleh semula, memberikan hasil yang diingini.

Atas ialah kandungan terperinci Mengapa Perintah Paip dalam `exec.Command()` Go Gagal dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan