go 调用linux命令ping,Go执行CMD或者Shell命令而且实时输出到控制台,效果和CMD执行结果方式彻底同样...

本文介绍如何在Linux中正确执行命令如ping,处理包含中文结果的输出,通过`execCommand`函数封装命令执行,并使用`ConvertByte2String`进行字符集转换,确保跨平台中文显示。适合程序员解决编码问题。
摘要由CSDN通过智能技术生成

不少时候咱们须要调用操做系统的命令来执行一些程序,在某些特殊的状况下,咱们须要拿到程序的调用结果,好比调用ping www.mashangedu.cn 可以返回每次ping的结果,如下代码为第二个版本,第一个版本参考网上,可是发现有中文异常,故又通过google,改进了初版,俗话说天下文章一大套,就看你会不会套了,对于程序员来讲也同样,就看怎么ctrl c v了。废话很少说了,上干货:linux

package main

import (

"bufio"

"fmt"

"io"

"os"

"os/exec"

"golang.org/x/text/encoding/simplifiedchinese"

)

type Charset string

const (

UTF8 = Charset("UTF-8")

GB18030 = Charset("GB18030")

)

func main(){

execCommand(os.Args[1], os.Args[2:])

}

//封装一个函数来执行命令

func execCommand(commandName string, params []string) bool {

//执行命令

cmd := exec.Command(commandName,params...)

//显示运行的命令

fmt.Println(cmd.Args)

stdout, err := cmd.StdoutPipe()

errReader,errr := cmd.StderrPipe()

if errr != nil{

fmt.Println("err:"+errr.Error())

}

//开启错误处理

go handlerErr(errReader)

if err != nil {

fmt.Println(err)

return false

}

cmd.Start()

in := bufio.NewScanner(stdout)

for in.Scan() {

cmdRe:=ConvertByte2String(in.Bytes(),"GB18030")

fmt.Println(cmdRe)

}

cmd.Wait()

cmd.Wait()

return true

}

//开启一个协程来错误

func handlerErr(errReader io.ReadCloser){

in := bufio.NewScanner(errReader)

for in.Scan() {

cmdRe:=ConvertByte2String(in.Bytes(),"GB18030")

fmt.Errorf(cmdRe)

}

}

//对字符进行转码

func ConvertByte2String(byte []byte, charset Charset) string {

var str string

switch charset {

case GB18030:

var decodeBytes,_=simplifiedchinese.GB18030.NewDecoder().Bytes(byte)

str= string(decodeBytes)

case UTF8:

fallthrough

default:

str = string(byte)

}

return str

}

编译后的执行结果以下:程序员

7fc64d701fab4ea79ac2bfcddd321503.png

个人文件名称为cmdgo,故编译后为cmdgo.exe ,在linux下也能够哦。golang

有问题能够在评论区留言,技术问题能够私聊我哦。函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值