>백엔드 개발 >Golang >채팅 봇에서 스크립트 실행을 위한 실시간 Stdout 캡처를 달성하는 방법은 무엇입니까?

채팅 봇에서 스크립트 실행을 위한 실시간 Stdout 캡처를 달성하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 07:50:30264검색

How to Achieve Real-Time Stdout Capture for Script Execution in a Chat Bot?

실시간 Stdout 캡처로 명령 실행

챗봇의 기능을 향상시키기 위한 목표는 다음을 수행하는 것입니다. 스크립트를 실행하고 stdout 출력을 채팅으로 직접 스트리밍합니다. 그러나 현재 구현에서는 스크립트가 끝날 때까지 전체 stdout을 저장합니다. 이를 해결하기 위해 실시간 출력을 제공하는 솔루션을 모색합니다.

현재 코드는 runcommand 함수를 활용하여 스크립트를 실행하고 Stdout을 반환합니다. 실시간 출력을 구현하려면 실행 프로세스와 출력 프로세스를 분리해야 합니다. 이 문제를 해결하기 위해 코드를 수정해 보겠습니다.

<code class="go">func reboot(command *bot.Cmd) (string, error) {
    n := command.Args[0]
    go runcommand(n)
    return "", nil
}</code>

업데이트된 재부팅 기능은 runcommand 기능을 고루틴으로 시작합니다. 이를 통해 스크립트 실행이 채팅 봇의 상호 작용과 동시에 발생할 수 있습니다.

<code class="go">func runcommand(server string) {
    cmd := exec.Command("/bin/bash", "-c", "python test.py %s", server)
    cmdReader, err := cmd.StdoutPipe()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
        return
    }

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

    err = cmd.Run()
    if err != nil {
        fmt.Fprintln(os.Stderr, "Error starting Cmd", err)
        return
    }
}</code>

수정된 runcommand 기능은 이제 스캐너를 사용하여 스크립트의 Stdout을 지속적으로 모니터링합니다. 모든 출력은 즉시 인쇄되어 실시간 stdout 캡처가 가능합니다.

이러한 변경을 통해 채팅 봇은 효과적으로 스크립트를 실행하고 stdout 출력을 실시간으로 채팅에 스트리밍하여 향상된 사용자 경험을 제공할 수 있습니다.

위 내용은 채팅 봇에서 스크립트 실행을 위한 실시간 Stdout 캡처를 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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