一尘不染

从exec.Command输出中解析整数

go

我目前正在尝试从Go程序内部运行命令,并从响应中解析一个整数。该命令返回如下输出:

6
fyb_src / ex1.fyb(1)获胜!

使用strings.Split和分割线并删除空白strings.TrimSpaces。但是,在尝试将数字解析为整数时,出现以下错误:

紧急:strconv.ParseInt:解析“ 0 \ r1 \ r2 \ r3 \ r4 \ r5 \ r6”:无效的语法

但是将我尝试解析的字符串打印到终端会产生以下结果:

6

我不太确定该从哪里去。这个数字对我来说显然像是一个整数。错误消息也没有用(至少对我而言)。有人有主意吗?

编辑:我正在运行的代码

    out, _ := exec.Command(pwd+"/osx_fukyobrane_amd64", "fyb_src/"+filename, "fyb_src/salty.fyb", "t").CombinedOutput()
    parts := strings.Split(string(out), "\n")

    fmt.Println(parts[0])

    rounds, err := strconv.Atoi(strings.TrimSpace(parts[0]))
    if err != nil {
        panic(err.Error())
    }

阅读 310

收藏
2020-07-02

共1个答案

一尘不染

看来您的问题是parts[0]包含字符串"0 \r1 \r2 \r3 \r4 \r5 \r6"而不是数字。

strconv.Atoi函数仅查找一个要解析的数字-在这种情况下,我假设您正在尝试获取第一个“
0”。如果是这样,那么问题在于此代码:strings.Split(string(out), "\n")仅在查找“ \ n”而不是“ \
r”,这显然是从返回的osx_fukyobrane_amd64

一种解决方案是改为像这样拆分行:

regexp.MustCompile(`[\r\n]+`).Split(parts[0], -1)

这样会将多行折叠在一起,并将\ r,\ n和\ r \ n(或其他奇怪的组合)视为有效的换行符。

2020-07-02