美文网首页Golang
介绍 golang执行系统命令

介绍 golang执行系统命令

作者: 易霂 | 来源:发表于2018-10-28 01:13 被阅读0次

golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout。这点和python下的command、os.system等功能是一样的。这里列两个具体操作的代码。其可以调用类LINUX系统下的shell命令,也可以在windows下调用cmd下的命令。

代码一

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命令时没有输出,这点感觉很奇怪。

相关文章

  • 介绍 golang执行系统命令

    golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdi...

  • Golang 命令

    本文简单介绍 Golang 提供的命令。我们执行 go help [command] 可以查看具体命令的帮助信息。...

  • Go 执行命令行并实时打印输出

    golang执行命令 && 实时获取输出结果 背景 golang可以获取命令执行的输出结果,但要执行完才能够获取。...

  • 命令执行

    命令行执行漏洞介绍 应用程序钟又是需要调用一些执行系统命令的函数,如Python的os模块提供了很多函数来执行系统...

  • Linux学习 进程

    基本介绍 ps命令是用来查看目前系统中,有哪些正在执行, 以及他们的执行状况。可以不加任何参数。 显示系统中执行...

  • 2.命令执行漏洞

    定义:攻击者可以随意执行系统命令,命令可以连接执行:&,||,| 命令执行漏洞:直接调用操作系统命令 代码执行漏洞...

  • golang 运行ffmpeg命令

    golang 运行ffmpeg命令 系统命令 ffmpeg转码 ffmpeg录音 录音设备名由命令获取 录音

  • linux定时任务crontab使用介绍

    1.crontab介绍   crontab命令设置定时任务执行的时间规则,系统自动周期性执行命令。这里我们就可以自...

  • 处理nohup命令生成的大文件

    工作的时候,用到了Golang开发项目,将Golang打包(go build)生成执行文件,之后用nohup命令运...

  • Golang 执行 Console 命令

    网上目前有比较多的方案来实现golang执行控制台命令,但是能做交互, 并且可以持续获取控制台返回结果的,还是比较...

网友评论

    本文标题:介绍 golang执行系统命令

    本文链接:https://www.haomeiwen.com/subject/dabutqtx.html