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