Saya mempunyai arahan shell (seperti journalctl -f -o json
) yang terus menstrim baris ke output standard.
Saya mahu baris demi barisuntuk mendapatkan semula output ini dan memprosesnya dengan lebih lanjut.
os/exec
的文档解决了如何读取命令的输出,io
Mengendalikan penimbalan strim.
Nampaknya semua pemprosesan melalui penimbal tetap yang dibaca, diproses dan selanjutnya ditulis. Masalah saya ialah saiz penimbal ini tetap dan bebas daripada kandungan.
Adakah terdapat cara untuk membaca aliran masuk (dalam kes saya output arahan shell) baris demi baris? Mungkin terdapat perpustakaan peringkat lebih tinggi daripada pembaca io
? io
读者更高级的库?
使用 cmd.stdoutpipe()
获取(管道)使用 cmd.start()
启动该进程之前的输出( start()
bufio.scanner
读取输入 (io.reader
Gunakan cm .stdoutpipe()
Dapatkan (talian paip) menggunakan cmd.start( )
Output sebelum memulakan proses ( start()
memulakan arahan tetapi tidak menunggu untuk selesai).
dan gunakan
) baris - baris demi baris.
Sebagai contoh, saya akan menggunakan skrip bash ini untuk mencetak masa semasa 3 kali dan tidur 1 saat antara setiap masa:
for i in {1..3}; do date; sleep 1; done
Contoh melaksanakan arahan ini dan membaca outputnya baris demi baris: log
包,以验证每行在第二次延迟后打印,另一个时间戳是 date
cmd := exec.command("bash", "-c", "for i in {1..3}; do date; sleep 1; done") out, err := cmd.stdoutpipe() if err != nil { log.fatal(err) } defer out.close() err = cmd.start() if err != nil { log.fatal(err) } scanner := bufio.newscanner(out) for scanner.scan() { line := scanner.text() fmt.println("output:", line) }
2022/11/29 14:38:48 Output: Tue Nov 29 02:38:48 PM CET 2022 2022/11/29 14:38:49 Output: Tue Nov 29 02:38:49 PM CET 2022 2022/11/29 14:38:50 Output: Tue Nov 29 02:38:50 PM CET 2022
Atas ialah kandungan terperinci Adakah terdapat konsep membaca output program sebagai aliran baris demi baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!