Melaksanakan Perintah dengan Paip dalam Go Menggunakan exec.Command()
Apabila bekerja dengan fungsi exec.Command() dalam Go, pengguna mungkin menghadapi kesukaran apabila cuba melaksanakan arahan yang melibatkan paip. Walaupun melaksanakan arahan mudah adalah mudah, menggunakan paip dalam arahan tersebut boleh menimbulkan cabaran.
Masalah:
Dalam keadaan ini, pengguna telah memerhatikannya semasa perintah berikut berjaya dilaksanakan dan mencetak output arahan "ps":
out, err := exec.Command("ps", "cax").Output()
Percubaan untuk menggunakan paip dalam arahan, seperti yang dilihat di bawah, mengakibatkan ralat:
out, err := exec.Command("ps", "cax | grep myapp").Output()
Penyelesaian:
Untuk menangani isu ini, terdapat dua pendekatan yang perlu dipertimbangkan:
Satu pilihan adalah untuk menghantar keseluruhan baris arahan ke bash dan memintanya melaksanakan saluran paip untuk anda. Pendekatan ini boleh dicapai dengan menggunakan kod berikut:
out, err := exec.Command("bash", "-c", "ps cax | grep myapp").Output()
Cara yang lebih idiomatik untuk mengendalikan situasi ini ialah menggunakan fungsi exec.Command() untuk mencipta dua arahan berasingan dan kemudian menyambungkan aliran input dan outputnya. Ini boleh dicapai seperti berikut:
package main import ( "fmt" "os/exec" ) func main() { grep := exec.Command("grep", "redis") ps := exec.Command("ps", "cax") // Get ps's stdout and attach it 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)) }
Dalam contoh ini, arahan "ps" dilaksanakan dahulu, dan outputnya disalurkan ke dalam arahan "grep", yang menapis output berdasarkan "redis "tali. Hasilnya kemudian dicetak ke output standard.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perintah Paip dalam Go menggunakan exec.Command()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!