Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyalurkan Output Perintah dengan Betul dalam `exec.Command()` Go?

Bagaimana untuk Menyalurkan Output Perintah dengan Betul dalam `exec.Command()` Go?

DDD
Lepaskan: 2024-12-15 05:24:10
asal
988 orang telah melayarinya

How to Properly Pipe Command Outputs in Go's `exec.Command()`?

Cara Menghasilkan Keputusan dalam exec.Command() Go untuk Rangkaian Perintah

Apabila menggunakan exec.Command() untuk melaksanakan arahan dalam Go, memaipkan output satu perintah kepada yang lain boleh mencabar.

Pertimbangkan perkara berikut contoh:

out, err := exec.Command("ps", "cax").Output() // Works and prints command output
Salin selepas log masuk

Walau bagaimanapun, apabila cuba memaipkan output ps ke grep, arahan gagal dengan status keluar 1:

out, err := exec.Command("ps", "cax | grep myapp").Output() // Fails
Salin selepas log masuk

Penyelesaian Paip Idiomatik

Untuk menyelesaikan isu ini, pendekatan yang lebih idiomatik ialah menggunakan exec.Command() untuk setiap arahan dan menyambungkan aliran input/output standard mereka secara terus. Begini caranya:

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 get the output of grep.
    res, _ := grep.Output()

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

Ini membolehkan anda melaksanakan berbilang arahan dan memaipkan input dan outputnya mengikut keperluan, menyediakan cara yang fleksibel untuk mengendalikan rantai arahan.

Atas ialah kandungan terperinci Bagaimana untuk Menyalurkan Output Perintah dengan Betul dalam `exec.Command()` Go?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan