duaner5714 2017-04-06 01:04
浏览 75
已采纳

如何从带空格的字符串创建os.exec Command结构

I want my method to receive a command to exec as a string. If the input string has spaces, how do I split it into cmd, args for os.exec?

The documentation says to create my Exec.Cmd struct like

cmd := exec.Command("tr", "a-z", "A-Z")

This works fine:

a := string("ifconfig")
cmd := exec.Command(a)
output, err := cmd.CombinedOutput()
fmt.Println(output) // prints ifconfig output

This fails:

a := string("ifconfig -a")
cmd := exec.Command(a)
output, err := cmd.CombinedOutput()
fmt.Println(output) // 'ifconfig -a' not found

I tried strings.Split(a), but receive an error message: cannot use (type []string) as type string in argument to exec.Command

  • 写回答

2条回答 默认 最新

  • duandushang5148 2017-04-06 01:42
    关注

    Please, check out: https://golang.org/pkg/os/exec/#example_Cmd_CombinedOutput

    Your code fails because exec.Command expects command arguments to be separated from actual command name.

    strings.Split signature (https://golang.org/pkg/strings/#Split):

    func Split(s, sep string) []string
    

    What you tried to achieve:

    command := strings.Split("ifconfig -a", " ")
    if len(command) < 2 {
        // TODO: handle error
    }
    cmd := exec.Command(command[0], command[1:]...)
    stdoutStderr, err := cmd.CombinedOutput()
    if err != nil {
        // TODO: handle error more gracefully
        log.Fatal(err)
    }
    // do something with output
    fmt.Printf("%s
    ", stdoutStderr)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波