Bagaimana untuk Menangkap stdout Pelaksanaan Perintah dalam Masa Nyata?

Linda Hamilton
Lepaskan: 2024-11-02 07:44:29
asal
495 orang telah melayarinya

How to Capture Command Execution stdout in Real Time?

Menangkap stdout Pelaksanaan Perintah dalam Masa Nyata

Dalam chatbot yang melaksanakan arahan, kita sering menghadapi keperluan untuk memaparkan stdout skrip dalam antara muka sembang. Walaupun pelaksanaan semasa mengumpul dan mengembalikan keseluruhan stdout sekaligus, kami mencari penyelesaian yang menyediakan output dalam masa nyata.

Memeriksa kod yang diberikan mendedahkan had di mana stdout diambil dan dikembalikan dalam satu panggilan fungsi (but semula()). Untuk mengeluarkan teks dalam masa nyata, kita perlu mengulangi arahan pelaksanaan dan menangkap stdout secara berterusan.

Kunci kepada penyelesaian ini ialah menggunakan kaedah StdoutPipe, yang membolehkan kami mencipta paip untuk menangkap output perintah yang dilaksanakan. Dengan mewujudkan paip untuk stdout arahan, kami boleh membaca dan memaparkan output secara berterusan.

Kod Diperbaiki:

<code class="go">package main

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

func main() {
    // Specify the command to execute
    cmd := exec.Command("command", "arguments")

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

    // Launch a goroutine to continuously read and display the output
    go func() {
        for scanner.Scan() {
            fmt.Printf("\t > %s\n", scanner.Text())
        }
    }()

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

    // Wait for the command to complete
    err = cmd.Wait()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err)
        return
    }
}</code>
Salin selepas log masuk

Dalam penyelesaian yang dipertingkat ini, kami terus membaca output daripada stdout arahan dalam goroutine, membenarkan paparan masa nyata stdout dalam antara muka sembang. Ini menghapuskan keperluan untuk penimbal yang besar dan mengelakkan pengembalian keseluruhan stdout dalam satu panggilan fungsi, menangani isu asal.

Atas ialah kandungan terperinci Bagaimana untuk Menangkap stdout Pelaksanaan Perintah dalam Masa Nyata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
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!