Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyalurkan Perintah dengan Betul dalam Pakej `os/exec` Go?

Bagaimana untuk Menyalurkan Perintah dengan Betul dalam Pakej `os/exec` Go?

Patricia Arquette
Lepaskan: 2024-11-19 15:52:03
asal
703 orang telah melayarinya

How to Properly Pipe Commands in Go's `os/exec` Package?

Perintah Paip dalam Go Menggunakan Pakej Exec

Arahan paip dalam Go boleh dicapai menggunakan pakej os/exec. Walau bagaimanapun, apabila cuba untuk menyalurkan output satu arahan ke yang lain, kesukaran mungkin timbul. Artikel ini menangani cabaran sedemikian dan menyediakan penyelesaian.

Pertimbangkan perintah berikut yang memaipkan stdout daripada phantomjs ke ffmpeg untuk mencipta video daripada imej yang ditangkap:

phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10  -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4
Salin selepas log masuk

Isu:

Melaksanakan arahan ini dengan exec.Command(bahagian[0], bahagian[1:]...), di mana bahagian mewakili komponen arahan, tidak menghormati paip.

Penyelesaian:

Untuk menyalurkan output dengan berkesan, gunakan pendekatan berikut:

Gunakan exec.Command("bash", "-c", command) untuk melaksanakan arahan sebagai skrip bash, di mana arahan ialah arahan paip yang dikehendaki. Kaedah ini mengendalikan paip secara telus.

Contoh:

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := "phantomjs runner.js | ffmpeg -y -c:v png -f image2pipe -r 25 -t 10  -i - -c:v libx264 -pix_fmt yuv420p -movflags +faststart dragon.mp4"
    output, err := exec.Command("bash", "-c", cmd).Output()
    if err != nil {
        fmt.Printf("Failed to execute command: %s", cmd)
    }
    fmt.Println(string(output))
}
Salin selepas log masuk

Dengan melaksanakan arahan sebagai skrip bash, paip kini diberi penghormatan, membolehkan output phantomjs dimasukkan dengan lancar ke ffmpeg.

Atas ialah kandungan terperinci Bagaimana untuk Menyalurkan Perintah dengan Betul dalam Pakej `os/exec` 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan