如何在golang中向exec.command添加空格

时间:2014-09-02 22:01:34

标签: process go

如何使用exec.command启动带空格的文件?添加引号似乎不起作用,也没有#34;或%20而不是空格。

package main

import (
"fmt"
"os/exec"
)

func main() {
    StartProcess("C:\\File With Spaces.txt")
}

func StartProcess(Filename string) {
    Filename = "\"" + Filename + "\""
    cmd := exec.Command("cmd","/C start",Filename)
    err := cmd.Start()
    if err!=nil{
    fmt.Println(err)
    }
}

3 个答案:

答案 0 :(得分:1)

如果您尝试在Windows上运行可执行文件,则不需要命令提示符。您只需将可执行路径传递给shell,它就会触发。

E.g:

func StartProcess(Filename string) {
    // Filename = "cmd /C start \"" + Filename + "\"" 
    cmd := exec.Command(Filename)
    err := cmd.Start()
    if err!=nil{
    fmt.Println(err)
    }
}

StartProcess("C:\\path to executable\\executable.exe")

也就是说,通常在Windows上启动可执行文件的所有框架(Go似乎包含在此中),在尝试连接自己的参数时会遇到麻烦。这就是args的{​​{1}}参数是可变参数的原因。所以你原来应该是这样的:

exec.Command

答案 1 :(得分:1)

这样可行,但仅限于Windows

cmd := exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", Filename)

答案 2 :(得分:0)

您需要cmd.Wait并检查您的方法返回的任何错误

package main

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

func main() {
    args := os.Args

    cmd := exec.Command(args[1], args[2:]...)
    var b bytes.Buffer
    cmd.Stdout = &b

    err := cmd.Start()
    if err != nil {
        log.Fatal(err)
    }
    if err := cmd.Wait(); err != nil {
        log.Fatal(err)
    }

    if _, err := os.Stdout.Write(b.Bytes()); err != nil {
        log.Fatal(err)
    }
}