Adakah terdapat konsep membaca output program sebagai aliran baris demi baris?

PHPz
Lepaskan: 2024-02-05 23:18:13
ke hadapan
650 orang telah melayarinya

Adakah terdapat konsep membaca output program sebagai aliran baris demi baris?

Kandungan soalan

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

Jawapan betul

bufio.scanner 读取输入 (io.readerGunakan 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
Salin selepas log masuk

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)
}
Salin selepas log masuk

Sampel output: 🎜
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
Salin selepas log masuk
🎜 (Masa tarikh pertama pada permulaan setiap baris datang daripada output arahan 🎜.) 🎜

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!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!