有没有办法检测go中的命令是否通过管道传输?示例:
cat test.txt | mygocommand #Piped, this is how it should be used mygocommand # Not piped, this should be blocked
我正在阅读标准输入reader := bufio.NewReader(os.Stdin)。
reader := bufio.NewReader(os.Stdin)
5tmbdcev1#
使用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") } }
(改编自this tutorial)
oxf4rvwz2#
对ModeNamedPipe执行类似的逐位操作也可以实现同样的效果
package main import ( "fmt" "os" ) func main() { fi, err := os.Stdin.Stat() if err != nil { panic(err) } if (fi.Mode() & os.ModeNamedPipe) != 0 { fmt.Println("data is from pipe") } else { fmt.Println("data is from terminal") } }
2条答案
按热度按时间5tmbdcev1#
使用
os.Stdin.Stat()
。(改编自this tutorial)
oxf4rvwz2#
对ModeNamedPipe执行类似的逐位操作也可以实现同样的效果