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!