> 백엔드 개발 > Golang > My Go 명령이 파이프에서 데이터를 수신합니까?

My Go 명령이 파이프에서 데이터를 수신합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-05 03:27:02
원래의
735명이 탐색했습니다.

Is My Go Command Receiving Data from a Pipe?

Go에서 명령이 파이프되는지 확인하는 방법

Go에서 입력 및 출력 작업을 할 때 다음 사항을 확인해야 하는 경우가 많습니다. 명령이 파이프되고 있는지 여부. 파이핑을 사용하면 Unix 파이프를 통해 한 프로세스의 출력에서 ​​다른 프로세스의 입력으로 데이터를 전달할 수 있습니다.

예:

<code class="sh">cat test.txt | mygocommand # Piped
mygocommand # Not piped</code>
로그인 후 복사

이러한 구별은 애플리케이션 동작을 사용자 정의하는 데 중요할 수 있습니다. .

솔루션

Go에서는 os.Stdin.Stat()을 사용하여 stdin이 파이프되었는지 확인하는 방법을 제공합니다. 예는 다음과 같습니다.

<code class="go">package main

import (
    "fmt"
    "os"
)

func main() {
    fi, _ := os.Stdin.Stat()

    if (fi.Mode() & os.ModeCharDevice) == 0 {
        fmt.Println("data is from pipe")
    } else {
        fmt.Println("data is from terminal")
    }
}</code>
로그인 후 복사

명령이 파이프되면(첫 번째 예와 같이) 출력은 다음과 같습니다.

data is from pipe
로그인 후 복사

그렇지 않으면 다음과 같습니다.

data is from terminal
로그인 후 복사

작동 방식

os.Stdin.Stat() 함수는 stdin 파일 설명자에 대한 정보가 포함된 FileInfo 개체를 반환합니다. FileInfo의 Mode() 메서드는 파일 형식에 대한 정보가 포함된 파일 모드를 반환합니다. 반환된 모드에 os.ModeCharDevice 플래그가 포함되어 있으면 파일이 터미널과 같은 문자 장치임을 나타냅니다. 그렇지 않은 경우 해당 파일이 일반 파일이거나 파이프임을 나타냅니다.

위 내용은 My Go 명령이 파이프에서 데이터를 수신합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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