来源:未知 时间:2019-12-10 21:26 作者:小飞侠 阅读:次
[导读] golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout。这点和python下的command、os.system等功能是一样的。这里列两个具体操作的代码。其可以调用类...
golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout。这点和python下的command、os.system等功能是一样的。这里列两个具体操作的代码。其可以调用类LINUX系统下的shell命令,也可以在windows下调用cmd下的命令。 Linux下执行命令的方法代码一package main import ( "bytes" "fmt" "log" "os/exec" ) const ShellToUse = "bash" func Shellout(command string) (error, string, string) { var stdout bytes.Buffer var stderr bytes.Buffer cmd := exec.Command(ShellToUse, "-c", command) cmd.Stdout = &stdout cmd.Stderr = &stderr err := cmd.Run() return err, stdout.String(), stderr.String() } func main() { err, out, errout := Shellout("ls -ltr") if err != nil { log.Printf("error: %v\n", err) } fmt.Println("--- stdout ---") fmt.Println(out) fmt.Println("--- stderr ---") fmt.Println(errout) } 以上代码执行后,效果如下: [root@361way go] go run cmd.go --- stdout --- total 24 drwxr-xr-x 6 root root 79 Jun 13 2017 src -rw-r--r-- 1 root root 752 Aug 19 10:55 login.go -rw-r--r-- 1 root root 1189 Aug 19 14:29 log.go -rw-r--r-- 1 root root 623 Aug 19 16:43 cmd.go -rw-r--r-- 1 root root 538 Aug 19 17:41 cmd2.go -rw-r--r-- 1 root root 519 Aug 19 21:38 http.go -rw-r--r-- 1 root root 462 Aug 19 22:29 test.py --- stderr -- 代码二package main import ( "fmt" "os/exec" ) func Cmd(cmd string, shell bool) []byte { if shell { out, err := exec.Command("bash", "-c", cmd).Output() if err != nil { panic("some error found") } return out } else { out, err := exec.Command(cmd).Output() if err != nil { panic("some error found") } return out } } func main() { //cmd := "ls -al" cmd := "python test.py" //cmd := "python -V" //没有输出 //cmd := "env" out := string(Cmd(cmd,true)) //out := string(Cmd(cmd,false)) fmt.Println(out) } 因为都是调用的exec.Command方法并调用bash shell,本质上并没有什么区别。其也可以正常调用python脚本,但在直接调用python -V命令时没有输出,这点感觉很奇怪。 windows下执行命令的方法 package main import( "fmt" "os/exec" ) func main(){ c := exec.Command("cmd", "/C", "del", "D:\\a.txt") if err := c.Run(); err != nil { fmt.Println("Error: ", err) } } |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com