国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在 Go 語言中使用 exec 包執行 Shell 命令

開發 前端
我們可以運行任何我們希望的命令。就像我們使用 CMD、bash 或其他一些 shell 來運行命令一樣,它可以運行這些命令。

exec 是 os 包中的一個子包,它可用于使用 Go 運行外部命令。Go exec 命令教程展示了如何在 Golang 中執行 shell 命令和程序。

要使用這個包,我們需要按如下方式導入:

import "os/exec"

1.使用 GoLang exec 包運行命令

我們可以運行任何我們希望的命令。就像我們使用 CMD、bash 或其他一些 shell 來運行命令一樣,它可以運行這些命令。

這是運行 ls? 命令的示例。新建一個 main.go :

package main

import (
"fmt"
"os/exec"
)

func main() {
cmd := exec.Command("ls")

e := cmd.Run()
CheckError(e)
}

func CheckError(e error) {
if e != nil {
fmt.Println(e)
}
}

Run? 函數啟動指定命令并等待它完成,而 Start 啟動指定命令但不等待它完成;我們需要使用Wait with Start。

然后新建一個 go.mod 文件:

$ go mod init main.go
go: creating new go.mod: module main.go
go: to add module requirements and sums:
go mod tidy

現在,程序將運行,但我們不會看到控制臺的任何輸出。原因是命令運行,輸出沒有發送到標準輸出。

$ go run main.go

所以,我們需要修復它。添加下面顯示的兩行以查看控制臺的任何輸出。

cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

輸出將顯示當前目錄中的文件。

package main

import (
"fmt"
"os"
"os/exec"
)

func main() {
cmd := exec.Command("ls", "-lah")

cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

e := cmd.Run()
CheckError(e)

}

func CheckError(e error) {
if e != nil {
fmt.Println(e)
}
}

然后我們再程序,可以看到標準臺輸出如下的文件:

$ go run main.go
total 16
drwxr-xr-x 4 yuzhou_1su staff 128B 5 15 22:56 .
drwxr-xr-x 23 yuzhou_1su staff 736B 5 15 22:53 ..
-rw-r--r-- 1 yuzhou_1su staff 24B 5 15 22:56 go.mod
-rw-r--r-- 1 yuzhou_1su staff 248B 5 15 23:18 main.go

利用直接 ls 直接運行該命令,可以看到結果正確:

$ ls -alh
total 16
drwxr-xr-x 4 yuzhou_1su staff 128B 5 15 22:56 .
drwxr-xr-x 23 yuzhou_1su staff 736B 5 15 22:53 ..
-rw-r--r-- 1 yuzhou_1su staff 24B 5 15 22:56 go.mod
-rw-r--r-- 1 yuzhou_1su staff 248B 5 15 23:18 main.go

2.為不同的操作系統指定命令

我們可以指定針對不同操作系統運行不同的命令(例如 Linux 上的 bash 命令)。這是一個例子。

if runtime.GOOS == "linux" {
cmd = exec.Command("ls")
}

為此,我們還需要導入運行時包。

要查看所有可能的操作系統,我們可以運行 go tool dist list ,它將顯示所有可能的操作系統和 ARCH 組合。

3.Go exec 命令捕獲輸出

輸出運行命令并返回其標準輸出:

package main

import (
"fmt"
"log"
"os/exec"
)

func main() {

out, err := exec.Command("ls", "-l").Output()

if err != nil {
log.Fatal(err)
}

fmt.Println(string(out))
}

運行該程序:

$ go run main.go
total 16
-rw-r--r-- 1 yuzhou_1su staff 24 5 15 22:56 go.mod
-rw-r--r-- 1 yuzhou_1su staff 180 5 15 23:33 main.go

4.Go cmd.StdinPipe

管道允許我們將一個命令的輸出發送到另一個命令。 StdinPipe 返回一個管道,該管道將在命令啟動時連接到命令的標準輸入。

package main

import (
"fmt"
"io"
"log"
"os/exec"
)

func main() {

cmd := exec.Command("cat")
stdin, err := cmd.StdinPipe()
if err != nil {
log.Fatal(err)
}

go func() {
defer stdin.Close()
io.WriteString(stdin, "an old falcon")
}()

out, err := cmd.CombinedOutput()
if err != nil {
log.Fatal(err)
}

fmt.Printf("%s\n", out)
}

在代碼示例中,我們將字符串寫入 goroutine 內的標準輸入。

cmd := exec.Command("cat")

cat 命令將給定的文件連接到標準輸出。當沒有給定文件或帶有 - 時,該命令讀取標準輸入并將其打印到標準輸出。

stdin, err := cmd.StdinPipe()

我們得到 cat 命令的標準輸入管道。

go func() {
defer stdin.Close()
io.WriteString(stdin, "an old falcon")
}()

在 goroutine 內部,我們將一個字符串寫入標準輸入管道。

$ go run stdinpipe.go 
an old falcon

5.Go cmd.StdoutPipe

StdoutPipe 返回一個管道,該管道將在命令啟動時連接到命令的標準輸出。

package main

import (
"fmt"
"io/ioutil"
"log"
"os/exec"
"strings"
)

func upper(data string) string {

return strings.ToUpper(data)
}

func main() {
cmd := exec.Command("echo", "an old falcon")

stdout, err := cmd.StdoutPipe()

if err != nil {
log.Fatal(err)
}

if err := cmd.Start(); err != nil {
log.Fatal(err)
}

data, err := ioutil.ReadAll(stdout)

if err != nil {
log.Fatal(err)
}

if err := cmd.Wait(); err != nil {
log.Fatal(err)
}

fmt.Printf("%s\n", upper(string(data)))
}

該示例通過管道讀取 echo 命令的輸出并將其轉換為大寫字母。

cmd := exec.Command("echo", "an old falcon")

要運行的命令是帶有單個字符串參數的 echo 命令。

stdout, err := cmd.StdoutPipe()

我們得到標準輸出管道。

if err := cmd.Start(); err != nil {
log.Fatal(err)
}

該命令使用 Start 函數執行;它不會等待它完成。

data, err := ioutil.ReadAll(stdout)

我們從管道中讀取數據。

if err := cmd.Wait(); err != nil {
log.Fatal(err)
}

Wait 等待命令退出并等待任何復制到 stdin 或從 stdout 或 stderr 復制完成。它在看到命令退出后關閉管道。

運行該程序:

$ go run stdoutpipe.go 
AN OLD FALCON

6.總結

os/exec? 包運行外部命令。它包裝了 os.StartProcess 以便更輕松地重新映射標準輸入和標準輸出、將 I/O 與管道連接以及進行其他調整。

參考鏈接:https://zetcode.com/golang/exec-command/

責任編輯:武曉燕 來源: 宇宙之一粟
相關推薦

2013-06-25 09:52:32

GoGo語言Go編程

2011-05-25 13:22:05

PHPJSON

2019-08-28 09:04:02

Go語言Python操作系統

2024-05-10 08:36:40

Go語言對象

2023-03-02 19:36:34

C語言

2022-09-29 10:01:05

Go編程語言文本文件

2014-04-09 09:32:24

Go并發

2016-02-22 15:02:57

GoRedis連接池

2023-12-25 09:58:25

sync包Go編程

2024-04-01 00:02:56

Go語言代碼

2017-04-05 13:17:26

LinuxShellvi

2023-11-27 19:39:46

Goprotobuf

2012-05-08 11:11:43

Linuxcrontab命令

2021-02-27 10:20:18

Go語言flag包開發技術

2023-10-09 07:14:42

panicGo語言

2018-11-05 13:50:44

Linux命令tcpdump

2009-11-18 13:46:11

PHP命令行

2023-11-27 17:03:45

syncGo

2010-03-04 15:28:01

Ubuntu Shel

2024-01-07 23:11:16

defer?Go語言
點贊
收藏

51CTO技術棧公眾號

波多野结衣在线中文| 天天色综合成人网| 中文字幕欧美一| 免费一级特黄特色毛片久久看| 97色婷婷成人综合在线观看| 在线不卡视频一区二区| 波多野结衣在线播放一区| 99精品一区二区三区的区别| 精品无人区一区二区| 欧美精品18+| 国产在线一在线二| 欧美日韩在线观看视频| 天堂在线视频| 亚洲嫩草精品久久| 久久久久久久久久久国产| 美女写真久久影院| 欧美一区二区久久| 欧美精品第三页| 国产一区二区在线影院| 欧美交换配乱吟粗大25p| 欧美xxxx做受欧美.88| 在线观看男女av免费网址| 韩日精品视频| 亚洲精品国产系列| 天堂午夜影视日韩欧美一区二区| www.在线观看av| 成人国产精品免费网站| 91超碰caoporn97人人| 亚洲五码在线| 国产精品一二三视频| 日韩毛片视频在线看| 男女视频在线观看免费| 在线播放日韩专区| 伊人久久大香线蕉av超碰演员| 尤物国产在线观看| 成人免费视频一区二区| 国产精品一区二区婷婷| 日韩成人久久久| 蜜臀av免费一区二区三区| 欧美性bbwbbwbbwhd| 国产激情一区二区三区桃花岛亚洲| 久久国产加勒比精品无码| www.久久久久久久久| 成人免费视频播放| 中文字幕欧美国产| 久久久国产精品一区| 深夜国产在线播放| 欧美亚一区二区| 成人福利在线| 91精品免费在线观看| 最新黄网在线观看| 亚洲精品美女网站| 成人激情视屏| caoporn97免费视频公开| 亚洲国产欧美久久| 狠狠躁少妇一区二区三区| 欧美成人官网二区| 免费视频观看成人| 国产伦精品一区二区三毛| 成人一区二区三区视频在线观看| 国产精品视频网站在线观看| 91精品动漫在线观看| 99久久精品无码一区二区毛片 | 中文不卡1区2区3区| 亚洲日本欧美天堂| 免费在线成人激情电影| 国产精品一区二区a| 在线观看亚洲视频| 青青久久精品| 97视频在线观看免费高清完整版在线观看 | 成人影音在线| 国产香蕉精品视频一区二区三区 | 日本在线天堂| 韩国三级成人在线| 伊人性伊人情综合网| 黄动漫在线看| 欧美久久一区二区| 欧美天堂一区二区| 国产精品一区久久久| 亚洲视频播放| 水蜜桃在线免费观看| 中文字幕五月欧美| 幼a在线观看| 北条麻妃一区二区三区中文字幕| 国产中文字幕一区二区三区| 欧美xxxx黑人又粗又长密月 | 亚洲最大的成人网| 日韩电影一区二区三区四区| 亚欧无线一线二线三线区别| 亚洲午夜久久久久中文字幕久| 日本成a人片在线观看| www.亚洲免费视频| 亚洲午夜精品一区二区国产| 成年人视频大全| 亚洲狠狠爱一区二区三区| 97蜜桃久久| 国产精品久久一区| 狠狠色综合播放一区二区| 啊啊啊好爽视频| 精品乱人伦小说| 亚洲午夜久久| 中国 免费 av| 欧美午夜www高清视频| a屁视频一区二区三区四区| 亚洲在线观看视频| 92精品国产成人观看免费| 午夜在线观看视频| 97超级碰碰人国产在线观看| 免费在线观看一区二区三区| 午夜影院免费| 色yeye香蕉凹凸一区二区av| 极品中文字幕一区| av网站免费在线| 亚洲无av在线中文字幕| 欧美日本三区| 白天操夜夜操| 久久精品亚洲国产| 奇米精品一区二区三区在线观看| 啊啊啊啊啊啊啊视频在线播放| 亚洲天堂网在线观看| 欧美女优在线视频| 免费欧美网站| 午夜伦理在线| www.久久久| 欧美日韩国产免费一区二区| 免费看久久久| 亚洲男人天堂2023| 中文字幕av亚洲精品一部二部| www插插插无码免费视频网站| 亚洲成人精品影院| 成人97精品毛片免费看| 日韩国产高清一区| 欧美性生活一区| 给我免费播放片在线观看| 风间由美一区二区av101| 亚洲欧洲精品在线观看| 精品欧美国产一区二区三区| 午夜视频在线观看网站| 大片在线观看网站免费收看| 91精品国产福利| 国产传媒久久文化传媒| 久久黄色影视| 黄网站免费在线观看| 人体内射精一区二区三区| 欧美一级电影在线| 欧美日韩卡一卡二| 日韩 欧美一区二区三区| 麻豆一区一区三区四区| 91xxx在线观看| 污网站免费在线| 日本国产在线播放| 久久伊人色综合| 亚洲成a人片在线不卡一二三区 | 国产精品爽爽爽| 91小视频免费看| 亚洲不卡av不卡一区二区| 欧洲一级精品| 国产精品四虎| 一个人看的免费视频色| 水蜜桃在线免费观看| 欧美一级黄色网| 99视频在线| 成人性生交免费看| 欧美精品99| 国产裸舞福利在线视频合集| 91久久精品国产91性色| 精品福利免费观看| 女同性一区二区三区人了人一 | 最新亚洲视频| www.在线视频.com| 国产精品一区免费观看| 欧美喷潮久久久xxxxx| 久草在线在线| 99国产精品久| 警花av一区二区三区| 免费一级特黄录像| 欧美精品激情视频| 亚洲东热激情| 亚洲人挤奶视频| 俄罗斯一级**毛片在线播放| 国产人成在线观看| 青青草在线播放| 伊人资源视频在线| 女人裸体免费网站| 女生裸体视频网站免费观看| 一级特黄性色生活片| 男女啪啪免费视频网站| 久久久久久久久久久久久久国产| 免费在线观看的av网站| 日本精品免费在线观看| 中国丰满人妻videoshd| 乌克兰美女av| 麻豆传媒在线播放| 男女在线观看视频| 视频精品一区二区三区| 精品自拍偷拍| 成人影视亚洲图片在线| jizzjizz少妇亚洲水多| 正在播放日韩精品| 偷窥自拍亚洲色图精选|