当前位置:首页 > 技术文档 > 正文内容

golang执行系统命令os exec

admin6年前 (2020-03-24)技术文档1453

os/exec Command方法

func Command(name string, arg ...string) *Cmd

调用示例

exec.Command("ls", "-a", "-l")

运行系统命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main
 
import (
    "io/ioutil"
    "log"
    "os/exec"
)
 
func main() {
    // 执行系统命令
    // 第一个参数是命令名称
    // 后面参数可以有多个,命令参数
    cmd := exec.Command("ls""-a""-l")
    // 获取输出对象,可以从该对象中读取输出结果
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }
    // 保证关闭输出流
    defer stdout.Close()
    // 运行命令
    if err := cmd.Start(); err != nil {
        log.Fatal(err)
    }
    // 读取输出结果
    opBytes, err := ioutil.ReadAll(stdout)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(string(opBytes))
}

运行

$ go run exec.go 
2016/07/24 22:14:16 total 24
drwxr-xr-x  5 chenjiebin  staff  170 Jul 24 22:10 .
drwxr-xr-x  3 chenjiebin  staff  102 Jul 24 06:38 ..
......

输出重定向到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main
 
import (
    "log"
    "os"
    "os/exec"
)
 
func main() {
    cmd := exec.Command("ls""-a""-l")
    // 重定向标准输出到文件
    stdout, err := os.OpenFile("stdout.log", os.O_CREATE|os.O_WRONLY, 0600)
    if err != nil {
        log.Fatalln(err)
    }
    defer stdout.Close()
    cmd.Stdout = stdout
    // 执行命令
    if err := cmd.Start(); err != nil {
        log.Println(err)
    }
}

运行

$ go run redirect.go 
执行成功后会将输出内容写入stdout.log

标准错误输出和标准输入重定向的方式类似。

Start和Run的区别

Start执行不会等待命令完成就,Run会阻塞等待命令完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main
 
import (
    "log"
    "os/exec"
)
 
func main() {
    cmd := exec.Command("sleep""5")
    // 如果用Run,执行到该步则会阻塞等待5秒
    // err := cmd.Run()
    err := cmd.Start()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Waiting for command to finish...")
    // Start,上面的内容会先输出,然后这里会阻塞等待5秒
    err = cmd.Wait()
    log.Printf("Command finished with error: %v", err)
}


分享到:

扫描二维码推送至手机访问。

版权声明:本文由云河空间发布,如需转载请注明出处。

本文链接:https://yuyunhe.cn/index.php/post/296.html

分享给朋友:

“golang执行系统命令os exec” 的相关文章

用php gettext库来开发多语言系统

用php gettext库来开发多语言系统

通常人们写程序时都是将文字写死在程序里的, 比如:echo "Hello World!";  ,假如要改成它国语言,写国际化程序,就要逐个打开进行修改,程序较短时还行,若程序有上万甚至更多,改起来就不是那么容易了。近来随着i18n的逐渐标 准化,我也来讲一讲在PHP中如...

图文解说Navicat使用ssh方式连接远程MySql服务器

图文解说Navicat使用ssh方式连接远程MySql服务器

如何使用Navicat 8.0 for MySQL连接公司服务器的数据库,但我也是第一次接触这个软件,搞了半天也没连上,在网上找了很多解决的办法,其中就有使用ssh方式连接的,但写的不够详细,因此还是费了一番功夫,自己搞定的,不敢独享,特记录下来 与大家分享。首先,在Navicat的连接设置里选择S...

jQuery编程的最佳实践

加载jQuery1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢。点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地址。<script type="text/javascript" src="...

Discuz!二次开发必备知识——DZ程序文件目录含义

分类: DZ程序文件目录含义基于7.0的标准程序,部分与插件无关的文件不作说明文件颜色说明:红色:程序核心文件,修改这类文件时千万要注意安全!橙色:做插件几乎不会用到的文件,大概了解功能就可以了,其实我也不推荐修改这些文件绿色:函数类文件,许多功能强大的自定义函数可以调用这类文件来...

PHP利用Curl模拟登录并获取数据例子

PHP利用Curl模拟登录并获取数据例子

几乎所有的程序员来模仿用户登录或抓取数据都会使用到curl函数,下面我来给各位介绍利用curl函数实现登录并抓取数据,希望下面例子对各位有帮助。PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下c...

wamp虚拟主机配置

1、首先打开apache的配置文件httpd.conf,并去掉#Include conf/extra/httpd-vhosts.conf前面的#,启用虚拟主机功能2、先把localhost配置好,免得以后访问localhost出现问题,我的wamp项目根目录是D:\wamp\www。将下面信息添加到...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。