명령 실행 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!