os/exec

本文详细介绍了如何使用Go语言执行Shell命令、管道操作、命令行输入与输出的读写,包括查找可执行文件、命令执行、命令输出读取等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"os/exec"
)

func main() {
	//搜索可执行的二进制文件路径
	f, err := exec.LookPath("php")
	fmt.Println(f, err)

	argv := []string{"php"}
	c := exec.Command("which", argv...) //执行一个shell命令
	d, _ := c.Output()                  //将*exec.Cmd标准输出为[]byte
	fmt.Println(string(d))              //就是输出刚才命令行执行的打印输出

	c2 := exec.Command("pwd", "-L") //执行一个shell命令
	d, err = c2.CombinedOutput()    //和上面的Output一样的
	fmt.Println(string(d), err, "11111")

	c3 := exec.Command("date")
	err = c3.Run() //会执行*Cmd中的命令,并等待命令执行完成
	if err != nil {
		fmt.Println(err)
	}
	d2, _ := c3.Output() //Cmd标准输出,测试的为毛没输出
	fmt.Println(string(d2), "为毛没输出")

	cmd := exec.Command("sleep", "5") //执行等待5秒
	err = cmd.Start()                 //开始执行,不会等待命令执行完成
	fmt.Println(err, "cmd.Start()不会等待命令执行完")
	err = cmd.Wait()
	fmt.Println("cmd.Wait()会等待上面的执行完了再执行Wait之后的")

	//打印命令行的输入
	var output bytes.Buffer
	cmd2 := exec.Command("cat")
	cmd2.Stdout = &output
	stdin, _ := cmd2.StdinPipe() //连接到命令启动时标准输入的管道
	cmd2.Start()
	stdin.Write([]byte("hello world"))
	stdin.Close()
	cmd2.Wait()
	fmt.Println(string(output.Bytes()))

	//打印命令行的输出
	cmd3 := exec.Command("ls", "-ll")
	stdout, _ := cmd3.StdoutPipe()  //输出刚才命令行的打印
	cmd3.Start()                    //开始执行
	dd, _ := ioutil.ReadAll(stdout) //从管道里读取数据
	cmd.Wait()                      //等待命令执行完
	fmt.Println(string(dd))

}



转载于:https://my.oschina.net/tongjh/blog/341748

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值