传递变量作为exec.Command()的参数

时间:2017-10-18 11:53:48

标签: go arguments

我想读取用户输入并将其用作命令的参数。我得到了这段代码:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
    "os/exec"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter img path: ")
    imgPath, _ := reader.ReadString('\n')

    args := []string{imgPath, "stdout", "-l spa+eng"}
    out, err := exec.Command("tesseract", args...).Output()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(out))
}

但是当我执行它时会输出一个错误,说明退出状态1

如果不是使用变量 imgPath 作为参数,我会将一些文本直接写入数组,它就像魅力一样。

1 个答案:

答案 0 :(得分:0)

以下代码返回带有分隔符的(我在Windows上工作,其EOL为'\ r \ n'),这是我在控制台上打印时未显示的内容。

reader := bufio.NewReader(os.Stdin)
imgPath, _ := reader.ReadString('\n')

在我的情况下,在我从输入中修剪'\ r \ n'后它最终工作了:

package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
    "os/exec"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter img path: ")
    imgPath, _ := reader.ReadString('\n')
    imgPath= strings.TrimRight(line, "\r\n")

    args := []string{imgPath, "stdout", "-l spa+eng"}
    out, err := exec.Command("tesseract", args...).Output()
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(out))
}