可执行文件example.exe接受三种输入情况,并且都会一步到底执行
- example.exe parameter
- example.exe
- echo xxx | example.exe
import "os"
if len(os.Args)>1{
os.Args[1] //得到parameter
//第一种情况process
}
第二三种情况
程序通过os.Stdin读取标准输入,但若始终在开始的时候读取,直接运行example.exe 程序会等待用户去输入,造成不好的效果.
所以先判断是否有来自管道的输入,若无则不再读取标准输入,直接进行下一步操作.
这里链接出国外大佬的解读,和golang中文社区的文档
内容非常透彻,值得一看
import "os"
con,_:=os.Stdin.Stat()
if con.Mode().String()[0]=='p'{
//第三种情况process,有管道内容途径此处
//由于con.Size()似乎永远是0,这里用循环读取方式拿到数据
var buffer=make([]byte,256)
var cut string
for {
n,err:=os.Stdin.Read(buffer[:])
if err!=nil{
break
}
cut+=string(buffer[:n])
}
//cut即为管道内容
os.Exit(0)
}
//第二种情况process
后话
本文是作者开发netcut时的所学
仅仅给出处理管道和运行时用户输入的办法,项目中完整运用.
如有建议或优化思路,欢迎评论指正或私信
如果本篇文章对你有帮助,请不要吝啬你的点赞。