有没有一种方法可以检测go中的命令是否通过管道传输?
例:
cat test.txt | mygocommand #Piped, this is how it should be used mygocommand # Not piped, this should be blocked
我正在从Stdin阅读reader := bufio.NewReader(os.Stdin)。
reader := bufio.NewReader(os.Stdin)
您可以使用进行此操作os.Stdin.Stat()。
os.Stdin.Stat()
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") } }
(改编自https://www.socketloop.com/tutorials/golang-check-if-os-stdin-input-data- is-piped-or-from-terminal)