




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Go语言入门exec的基本使用示例目录使用GoLangexec包运行命令为不同的操作系统指定命令Goexec命令捕获输出Gocmd.StdinPipeGocmd.StdoutPipe总结Exec是os包中的一个子包,它可用于使用Go运行外部命令。Goexec命令教程展示了如何在Golang中执行shell命令和程序。
要使用这个包,我们需要按如下方式导入:
import"os/exec"
使用GoLangexec包运行命令
我们可以运行任何我们希望的命令。就像我们使用CMD、bash或其他一些shell来运行命令一样,它可以运行这些命令。
这是运行ls命令的示例。新建一个main.go:
packagemain
import(
"fmt"
"os/exec"
funcmain(){
cmd:=exec.Command("ls")
e:=cmd.Run()
CheckError(e)
funcCheckError(eerror){
ife!=nil{
fmt.Println(e)
}
Run函数启动指定命令并等待它完成,而Start启动指定命令但不等待它完成;我们需要使用WaitwithStart。
然后新建一个go.mod文件:
$gomodinitmain.go
go:creatingnewgo.mod:modulemain.go
go:toaddmodulerequirementsandsums:
gomodtidy
现在,程序将运行,但我们不会看到控制台的任何输出。原因是命令运行,输出没有发送到标准输出。
$gorunmain.go
所以,我们需要修复它。添加下面显示的两行以查看控制台的任何输出。
cmd.Stdout=os.Stdout
cmd.Stderr=os.Stderr
输出将显示当前目录中的文件。
packagemain
import(
"fmt"
"os"
"os/exec"
funcmain(){
cmd:=exec.Command("ls","-lah")
cmd.Stdout=os.Stdout
cmd.Stderr=os.Stderr
e:=cmd.Run()
CheckError(e)
funcCheckError(eerror){
ife!=nil{
fmt.Println(e)
然后我们再程序,可以看到标准台输出如下的文件:
$gorunmain.go
total16
drwxr-xr-x4yuzhou_1sustaff128B51522:56.
drwxr-xr-x23yuzhou_1sustaff736B51522:53..
-rw-r--r--1yuzhou_1sustaff24B51522:56go.mod
-rw-r--r--1yuzhou_1sustaff248B51523:18main.go
利用直接ls直接运行该命令,可以看到结果正确:
$ls-alh
total16
drwxr-xr-x4yuzhou_1sustaff128B51522:56.
drwxr-xr-x23yuzhou_1sustaff736B51522:53..
-rw-r--r--1yuzhou_1sustaff24B51522:56go.mod
-rw-r--r--1yuzhou_1sustaff248B51523:18main.go
为不同的操作系统指定命令
我们可以指定针对不同操作系统运行不同的命令(例如Linux上的bash命令)。这是一个例子。
ifruntime.GOOS=="linux"{
cmd=exec.Command("ls")
为此,我们还需要导入运行时包。
要查看所有可能的操作系统,我们可以运行gotooldistlist,它将显示所有可能的操作系统和ARCH组合。
Goexec命令捕获输出
输出运行命令并返回其标准输出:
packagemain
import(
"fmt"
"log"
"os/exec"
funcmain(){
out,err:=exec.Command("ls","-l").Output()
iferr!=nil{
log.Fatal(err)
fmt.Println(string(out))
运行该程序:
$gorunmain.go
total16
-rw-r--r--1yuzhou_1sustaff2451522:56go.mod
-rw-r--r--1yuzhou_1sustaff18051523:33main.go
Gocmd.StdinPipe
管道允许我们将一个命令的输出发送到另一个命令。StdinPipe返回一个管道,该管道将在命令启动时连接到命令的标准输入。
packagemain
import(
"fmt"
"io"
"log"
"os/exec"
funcmain(){
cmd:=exec.Command("cat")
stdin,err:=cmd.StdinPipe()
iferr!=nil{
log.Fatal(err)
gofunc(){
deferstdin.Close()
io.WriteString(stdin,"anoldfalcon")
out,err:=cmd.CombinedOutput()
iferr!=nil{
log.Fatal(err)
fmt.Printf("%s\n",out)
}
在代码示例中,我们将字符串写入goroutine内的标准输入。
cmd:=exec.Command("cat")
cat命令将给定的文件连接到标准输出。当没有给定文件或带有-时,该命令读取标准输入并将其打印到标准输出。
stdin,err:=cmd.StdinPipe()
我们得到cat命令的标准输入管道。
gofunc(){
deferstdin.Close()
io.WriteString(stdin,"anoldfalcon")
}()
在goroutine内部,我们将一个字符串写入标准输入管道。
$gorunstdinpipe.go
anoldfalcon
Gocmd.StdoutPipe
StdoutPipe返回一个管道,该管道将在命令启动时连接到命令的标准输出。
packagemain
import(
"fmt"
"io/ioutil"
"log"
"os/exec"
"strings"
funcupper(datastring)string{
returnstrings.ToUpper(data)
funcmain(){
cmd:=exec.Command("echo","anoldfalcon")
stdout,err:=cmd.StdoutPipe()
iferr!=nil{
log.Fatal(err)
iferr:=cmd.Start();err!=nil{
log.Fatal(err)
data,err:=ioutil.ReadAll(stdout)
iferr!=nil{
log.Fatal(err)
iferr:=cmd.Wait();err!=nil{
log.Fatal(err)
fmt.Printf("%s\n",upper(string(data)))
该示例通过管道读取echo命令的输出并将其转换为大写字母。
cmd:=exec.Command("echo","anoldfalcon")
要运行的命令是带有单个字符串参数的echo命令。
stdout,err:=cmd.StdoutPipe()
我们得到标准输出管道。
iferr:=cmd.Start();err!=nil{
log.Fatal(err)
}
该命令使用Start函数执行;它不会等待它完成。
data,err:=ioutil.ReadAll(stdout)
我们从管道中读取数据。
iferr:=cmd.Wait();err!=nil{
log.Fatal(err)
}
Wait等待命令退出并等待任何复制到stdin或从stdout或stderr复制完成。它在看到命令退出后关闭管道。
运行该程序:
$go
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学影像学题库
- 餐饮租赁协议一定要注意4点
- 2025酒店工作总结(33篇)
- 2025河北张家口市怀来经开创新实业有限公司招聘工作人员2人笔试参考题库附带答案详解
- 2025新疆新星天元农牧业发展集团有限公司第一次招聘工作人员招聘7人笔试参考题库附带答案详解
- 2025年安徽江淮汽车集团股份有限公司招聘5人笔试参考题库附带答案详解
- 2025山东济南平阴县鲁中山河科技发展有限公司招聘4人笔试参考题库附带答案详解
- 2025国网吉林省电力有限公司高校毕业生招聘约134人(第二批)笔试参考题库附带答案详解
- 公共卫生与防疫课件
- 《宝石鉴赏新视角》课件
- 公司材料领用单
- 连续梁预应力常见问题及处理措施
- Teece蒂斯——动态能力与战略管理中译版讲课稿
- 实验--验证动量守恒定律优秀课件
- 钢结构楼梯施工方案
- 剑桥少儿英语一级上册Unit1-8测试卷
- 拌合站水泥罐基础地基承载力计算书
- 工程建设领域廉政风险防范示意图
- 艾滋病防治条例PPT课件
- 活性炭吸附铜离子的研究
- 激光技术及应用介绍
评论
0/150
提交评论