os/exec

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))

}
时间: 2024-11-06 03:40:40

os/exec的相关文章

python os.exec*()家族函数的用法

execl(file, arg0,arg1,...) 用参数列表arg0, arg1 等等执行文件 execv(file, arglist) 除了使用参数向量列表,其他的和execl()相同 execle(file, arg0,arg1,... env) 和execl 相同,但提供了环境变量字典env execve(file,arglist, env) 除了带有参数向量列表,其他的和execle()相同 execlp(cmd, arg0,arg1,...) 于execl()相同,但是在用户的搜索

go语言中os/exec包的学习与使用

package main; import ( "os/exec" "fmt" "io/ioutil" "bytes" ) func main() { //在环境变量path中查找可执行二进制文件 //返回完整路径或者相对于当前目录的一个相对路径 file, _ := exec.LookPath("go"); fmt.Println(file); //返回一个cmd cmd := exec.Command(&

转---python os.exec*()家族函数的用法

execl(file, arg0,arg1,...) 用参数列表arg0, arg1 等等执行文件 execv(file, arglist) 除了使用参数向量列表,其他的和execl()相同 execle(file, arg0,arg1,... env) 和execl 相同,但提供了环境变量字典env execve(file,arglist, env) 除了带有参数向量列表,其他的和execle()相同 execlp(cmd, arg0,arg1,...) 于execl()相同,但是在用户的搜索

python之os.exec*族用法简结

os.exec*族主要用来代替当前进程,执行新的程序,不返回值.在UNIX上,新的执行程序加载到当前进程,与调用它的进程有相同的id. os.execl(path, arg0, arg1, ...) os.execle(path, arg0, arg1, ..., env) os.execlp(file, arg0, arg1, ...) os.execlpe(file, arg0, arg1, ..., env)o s.execv(path, args) os.execve(path, arg

Golang os/exec 实现

os/exec 实现了golang调用shell或者其他OS中已存在的命令的方法. 本文主要是阅读内部实现后的一些总结. 如果要运行ls -rlt,代码如下: package main import ( "fmt" "log" "os/exec" ) func main() { cmd := exec.Command("ls", "-rlt") stdoutStderr, err := cmd.Combin

python os模块进程管理

有两种方式来实现并发性,一种方式是让每个"任务"或"进程"在单独的内在空间中工作,每个都有自已的工作内存区域.不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否则,实际并不是"同时"运行的.是由操作系统把处理器的时间片分配给一个进程,用完时间片后就需退出处理器等待另一个时间片的到来.另一种方式是在在程序中指定多个"执行线程",让它们在相同的内存空间中工作.这称为"多线程处理".线

『Golang』—— 标准库之 os

Golang 的 os 库基本承袭 Unix 下 C 语言的用法 path 库: func Base(path string) string //取文件名,不含目录部分 func Dir(path string) string //取路径中的目录名部分,不含文件名 func Join(elem ...string) string //拼接字段,中间自动添加 '/' os 库: 1 ackage main 2 3 import "os" 4 import "os/exec&qu

go语言创建新进程过程详解 (os.StartProcess源码分析)

关于如何使用go语言实现新进程的创建和进程间通信,我在网上找了不少的资料,但是始终未能发现让自己满意的答案,因此我打算自己来分析这部分源代码,然后善加利用,并且分享给大家,期望大家能从中获得启发. 首先我们来看一段代码 proc, _ := os.StartProcess(name, args, attr) if err != nil { fmt.Println(err) } _, err = proc.Wait() if err != nil { fmt.Println(err) } 我们来看

Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command

错误如下: Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [/tmp/brut_util_Jar_7329934395291017709.tmp, p, --forced-package-id, 127, --min-sdk-version, 9,