Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah terdapat konsep membaca output program sebagai aliran baris demi baris?

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

PHPz
PHPzke hadapan
2024-02-05 23:18:13651semak imbas

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

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

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
🎜 (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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam