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

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

Patricia Arquette
Patricia Arquetteasal
2024-11-19 15:52:03672semak imbas

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

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))
}

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!

Kenyataan:
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