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条)

报告相同问题?

悬赏问题

  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢