Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Memaparkan Output Masa Nyata daripada Perintah Dilaksanakan dalam Bot Sembang?

Bagaimana untuk Memaparkan Output Masa Nyata daripada Perintah Dilaksanakan dalam Bot Sembang?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 19:49:29547semak imbas

How to Display Real-Time Output from Executed Commands in Chat Bots?

Berkomunikasi Output Masa Nyata daripada Perintah Dilaksanakan dalam Bot Sembang

Apabila mereka bentuk bot sembang yang mampu melaksanakan arahan, mengekstrak dan memaparkan output dalam masa sebenar adalah penting. Ini boleh mencabar apabila pelaksanaan sedia ada mengembalikan semua stdout sekaligus dan bukannya secara berperingkat.

Menyelesaikan Masalah Pendekatan Sedia Ada

Kod bot anda, yang menggunakan func runcommand, mengumpul dan melepaskan semua stdout setelah pelaksanaan selesai. Untuk mencapai output masa nyata, kami akan meneroka pendekatan alternatif.

Teknik Paip Output Masa Nyata

Kami memperkenalkan teknik yang terus menyalurkan output daripada melaksanakan arahan ke dalam sembang. Ini melibatkan:

  1. Mencipta paip menggunakan cmdReader, err := cmd.StdoutPipe().
  2. Menggunakan pengimbas untuk membaca output secara berperingkat: scanner := bufio.NewScanner(cmdReader ).
  3. Menyediakan goroutine untuk terus mencetak output:

    go func() {
        for scanner.Scan() {
            fmt.Printf("\t > %s\n", scanner.Text())
        }
    }()

Kod Contoh

Berikut ialah contoh yang memaipkan output masa nyata daripada arahan ekor yang digunakan untuk memantau fail log:

package main

import (
    "os"
    "os/exec"
    "fmt"
    "bufio"
)

func main() {
    cmd := exec.Command("tail", "-f",  "/usr/local/var/log/redis.log")

    // create a pipe for the output of the script
    cmdReader, err := cmd.StdoutPipe()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
        return
    }

    scanner := bufio.NewScanner(cmdReader)
    go func() {
        for scanner.Scan() {
            fmt.Printf("\t > %s\n", scanner.Text())
        }
    }()

    err = cmd.Start()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error starting Cmd", err)
        return
    }

    err = cmd.Wait()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err)
        return
    }
}

Dengan melaksanakan teknik ini, bot anda boleh memaparkan output arahan yang dilaksanakan dalam masa nyata, meningkatkan pengalaman pengguna dalam aplikasi sembang anda.

Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Output Masa Nyata daripada Perintah Dilaksanakan dalam Bot Sembang?. 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