> 백엔드 개발 > Golang > 콘솔에 명령 출력을 동시에 기록하고 인쇄하는 방법은 무엇입니까?

콘솔에 명령 출력을 동시에 기록하고 인쇄하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-04 01:12:02
원래의
523명이 탐색했습니다.

How to Simultaneously Log and Print Command Output to Console?

Stdout 및 Stderr 명령에 대한 동시 콘솔 및 로그 출력

제공된 코드의 목표는 stdout 및 stderr 명령을 콘솔에 인쇄하는 것입니다. 명령을 수정하지 않고 콘솔 순서대로 파일에 동시에 기록하는 동시에 실시간으로

이를 달성하기 위해 io.MultiWriter 유형을 활용할 수 있습니다. 방법은 다음과 같습니다.

<code class="go">package main

import (
    "io"
    "log"
    "os"
    "os/exec"
)

func main() {
    // Logging capability
    f, err := os.OpenFile("log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if err != nil {
        log.Fatalf("Error opening file: %v", err)
    }
    defer f.Close()

    // Define a MultiWriter that includes both the log file and stdout
    multiWriter := io.MultiWriter(f, os.Stdout)

    // Set stdout and stderr of the command to the MultiWriter
    cmd := exec.Command("php", "randomcommand.php")
    cmd.Stdout = multiWriter
    cmd.Stderr = multiWriter

    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}</code>
로그인 후 복사

multiWriter를 로그 파일과 stdout의 조합으로 정의함으로써 명령 출력을 두 대상에 동시에 효과적으로 쓸 수 있습니다. cmd.Run()은 명령이 완료될 때까지 차단하여 출력 순서가 유지되도록 합니다.

이 솔루션은 모든 요구 사항을 충족합니다.

  • stdout 및 stderr을 콘솔에 실시간으로 인쇄합니다.
  • stdout 및 stderr을 파일에 기록하고 콘솔을 미러링합니다. 출력.
  • stdout 및 stderr에 대한 정확한 쓰기 순서를 존중합니다.
  • 명령 자체를 수정하지 않습니다.

위 내용은 콘솔에 명령 출력을 동시에 기록하고 인쇄하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿