>  기사  >  백엔드 개발  >  명령 실행 표준 출력을 실시간으로 캡처하는 방법은 무엇입니까?

명령 실행 표준 출력을 실시간으로 캡처하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 07:44:29485검색

How to Capture Command Execution stdout in Real Time?

명령 실행 stdout을 실시간으로 캡처

명령을 실행하는 챗봇에서는 스크립트의 stdout을 표시해야 하는 경우가 종종 있습니다. 채팅 인터페이스. 현재 구현에서는 전체 stdout을 한 번에 수집하고 반환하지만, 우리는 실시간으로 출력을 제공하는 솔루션을 찾고 있습니다.

주어진 코드를 살펴보면 단일 함수 호출에서 stdout을 검색하고 반환하는 제한 사항이 드러납니다. (재부팅()). 실시간으로 텍스트를 출력하려면 실행 명령을 반복하고 stdout을 지속적으로 캡처해야 합니다.

이 솔루션의 핵심은 StdoutPipe 메서드를 활용하여 출력을 캡처하기 위한 파이프를 생성할 수 있다는 것입니다. 실행된 명령. 명령의 stdout에 대한 파이프를 설정함으로써 출력을 지속적으로 읽고 표시할 수 있습니다.

개선된 코드:

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

이 개선된 솔루션에서는 지속적으로 고루틴 내 명령의 stdout 출력을 통해 채팅 인터페이스에 stdout을 실시간으로 표시할 수 있습니다. 이렇게 하면 큰 버퍼가 필요하지 않으며 단일 함수 호출에서 전체 stdout이 반환되지 않아 원래 문제가 해결됩니다.

위 내용은 명령 실행 표준 출력을 실시간으로 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.