導航:首頁 > 程序命令 > go語言命令

go語言命令

發布時間:2023-01-09 00:53:22

❶ Go執行命令行操作

go中提供了 os/exec 包使用 Command 函數可以完成一些調用命令行的操作。因為系統的不同,調用的參數會有點些不一樣。

其他的創建執行都是一樣的。

我們可以封裝一個函數,輸入需要執行的命令,輸入返回結果

調用測試

❷ 如何使用Go語言實現遠程執行命令

一般命令
所謂一般命令,就是在一定時間內會執行完的命令。比如 grep, cat 等等。 執行命令的步驟是:連接,執行,獲取結果
連接
連接包含了認證,可以使用 password 或者 sshkey 2種方式來認證。下面的示例為了簡單,使用了密碼認證的方式來完成連接。
import (
"fmt"
"time"
"golang.org/x/crypto/ssh"
)
func connect(user, password, host string, port int) (*ssh.Session, error) {
var (
auth []ssh.AuthMethod
addr string
clientConfig *ssh.ClientConfig
client *ssh.Client
session *ssh.Session
err error
)
// get auth method
auth = make([]ssh.AuthMethod, 0)
auth = append(auth, ssh.Password(password))
clientConfig = &ssh.ClientConfig{
User: user,
Auth: auth,
Timeout: 30 * time.Second,
}
// connet to ssh
addr = fmt.Sprintf("%s:%d", host, port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
return nil, err
}
// create session
if session, err = client.NewSession(); err != nil {
return nil, err
}
return session, nil
}
連接的方法很簡單,只要提供登錄主機的 用戶*, *密碼*, *主機名或者IP*, *SSH埠
執行,命令獲取結果
連接成功後,執行命令很簡單
import (
"fmt"
"log"
"os"
"time"
"golang.org/x/crypto/ssh"
)
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Run("ls /; ls /abc")
}
上面代碼運行之後,雖然命令正常執行了,但是沒有正常輸出的結果,也沒有異常輸出的結果。 要想顯示結果,需要將 session 的 Stdout 和 Stderr 重定向 修改 func main 為如下:
func main() {
session, err := connect("root", "xxxxx", "127.0.0.1", 22)
if err != nil {
log.Fatal(err)
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Run("ls /; ls /abc")
}
這樣就能在屏幕上顯示正常,異常的信息了。
互動式命令
上面的方式無法遠程執行互動式命令,比如 top , 遠程編輯一個文件,比如 vi /etc/nginx/nginx.conf 如果要支持互動式的命令,需要當前的terminal來接管遠程的 PTY。
func main() {
session, err := connect("root", "olordjesus", "dockers.iotalabs.io", 2210)
if err != nil {
log.Fatal(err)
}
defer session.Close()
fd := int(os.Stdin.Fd())
oldState, err := terminal.MakeRaw(fd)
if err != nil {
panic(err)
}
defer terminal.Restore(fd, oldState)
// excute command
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
termWidth, termHeight, err := terminal.GetSize(fd)
if err != nil {
panic(err)
}
// Set up terminal modes
modes := ssh.TerminalModes{
ssh.ECHO: 1, // enable echoing
ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud
ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud
}
// Request pseudo terminal
if err := session.RequestPty("xterm-256color", termHeight, termWidth, modes); err != nil {
log.Fatal(err)
}
session.Run("top")
}

❸ 寫命令行應用程序什麼不可或缺Go可以這樣處理命令行參數

Go語言內置的flag包實現了命令行參數的解析,flag包使得開發命令行工具更為簡單。

如果你只是簡單的想要獲取命令行參數,可以像下面的代碼示例一樣使用os.Args來獲取命令行參數。

將上面的代碼執行go build -o "args_demo"編譯之後,執行:

os.Args是一個存儲命令行參數的字元串切片,它的第一個元素是執行文件的名稱。

本文介紹了flag包的常用函數和基本用法,更詳細的內容請查看官方文檔。

flag包支持的命令行參數類型有bool、int、int64、uint、uint64、float float64、string、ration。

有以下兩種常用的定義命令行flag參數的方法。

基本格式如下:

flag.Type(flag名, 默認值, 幫助信息)*Type 例如我們要定義姓名、年齡、婚否三個命令行參數,我們可以按如下方式定義:

需要注意的是,此時name、age、married、delay均為對應類型的指針。

基本格式如下: flag.TypeVar(Type指針, flag名, 默認值, 幫助信息) 例如我們要定義姓名、年齡、婚否三個命令行參數,我們可以按如下方式定義:

通過以上兩種方法定義好命令行flag參數後,需要通過調用flag.Parse()來對命令行參數進行解析。

支持的命令行參數格式有以下幾種:

其中,布爾類型的參數必須使用等號的方式指定。

Flag解析在第一個非flag參數(單個」-「不是flag參數)之前停止,或者在終止符」–「之後停止。

定義

使用

命令行參數使用提示:

$ ./flag_demo -help

Usage of ./flag_demo:

-age int

年齡 (default 18)

-d ration

時間間隔

-married

婚否

-name string

姓名 (default "張三")

正常使用命令行flag參數:

使用非flag命令行參數:

原文鏈接:https://www.liwenzhou.com/posts/Go/go_flag/

❹ 可以用go語言成功執行shutdown命令嗎怎麼做

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

funcexec_shell()(string,error){
//函數返回一個*Cmd,用於使用給出的參數執行name指定的程序
cmd:=exec.Command("shutdown","-h","now")

//讀取io.Writer類型的cmd.Stdout,再通過bytes.Buffer(緩沖byte類型的緩沖器)將byte類型轉化為string類型(out.String():這是bytes類型提供的介面)
varoutbytes.Buffer
cmd.Stdout=&out

//Run執行c包含的命令,並阻塞直到完成。這里stdout被取出,cmd.Wait()無法正確獲取stdin,stdout,stderr,則阻塞在那了
err:=cmd.Run()
returnout.String(),err
}

funcmain(){
ifresult,err:=exec_shell();err!=nil{
fmt.Println("error:",err)
}else{
fmt.Println("execsucc",result)
}
}

閱讀全文

與go語言命令相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163