溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Golang怎么執(zhí)行cmd命令行

發(fā)布時(shí)間:2022-08-17 15:58:54 來(lái)源:億速云 閱讀:476 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“Golang怎么執(zhí)行cmd命令行”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Golang怎么執(zhí)行cmd命令行”文章吧。

1. Golang執(zhí)行系統(tǒng)命令使用 os/exec Command方法:

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

第一個(gè)參數(shù)是命令名稱(chēng),后面參數(shù)可以有多個(gè)命令參數(shù)。

cmd := exec.Command("ls", "-a")
if stdout, err := cmd.StdoutPipe(); err != nil {     //獲取輸出對(duì)象,可以從該對(duì)象中讀取輸出結(jié)果

    log.Fatal(err)

}

defer stdout.Close()   // 保證關(guān)閉輸出流
if err := cmd.Start(); err != nil {   // 運(yùn)行命令

    log.Fatal(err)

}

if opBytes, err := ioutil.ReadAll(stdout); err != nil {  // 讀取輸出結(jié)果    

    log.Fatal(err)

} else {
    log.Println(string(opBytes))

}

2.  將命令的輸出結(jié)果重定向到文件中: 

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   // 重定向標(biāo)準(zhǔn)輸出到文件

    // 執(zhí)行命令

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

    }

3. cmd的Start和Run方法的區(qū)別: 

Start執(zhí)行不會(huì)等待命令完成,Run會(huì)阻塞等待命令完成。

cmd := exec.Command("sleep", "10")
err := cmd.Run()  //執(zhí)行到此處時(shí)會(huì)阻塞等待10秒
err := cmd.Start()   //如果用start則直接向后運(yùn)行
if err != nil {
    log.Fatal(err)

}
err = cmd.Wait()   //執(zhí)行Start會(huì)在此處等待10秒

4. 如果命令名稱(chēng)和參數(shù)寫(xiě)成一個(gè)字符串傳給Command方法,可能會(huì)執(zhí)行失敗報(bào)錯(cuò):file does not exist,但此時(shí)如果按以下方式強(qiáng)行啟動(dòng)一個(gè)DOS窗口(windows平臺(tái))進(jìn)行執(zhí)行,也是成功的。

在Windows平臺(tái),強(qiáng)行彈出DOS窗口執(zhí)行命令行: 

cmdLine := pscp -pw pwd local_filename user@host:/home/workspace   
cmd := exec.Command("cmd.exe", "/c", "start " + cmdLine)
err := cmd.Run()
fmt.Printf("%s, error:%v \n", cmdLine, err)

5. 運(yùn)行時(shí)隱藏golang程序自己的cmd窗口:

go build -ldflags -H=windowsgui

6. Windows平臺(tái)上,執(zhí)行系統(tǒng)命令隱藏cmd窗口:

cmd := exec.Command("sth")
if runtime.GOOS == "windows" {
    cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
}
err := cmd.Run()

以上就是關(guān)于“Golang怎么執(zhí)行cmd命令行”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI