执行外部命令并返回其输出

时间:2018-10-12 12:02:57

标签: go

我正在尝试执行linux命令并将输出转换为int。这是我当前的代码:

package main

import (
    "os/exec"
    "os"
    "strconv"
    _"fmt"
    "log"
    "bytes"
)

func main(){

    cmd := exec.Command("ulimit", "-n")
    cmdOutput := &bytes.Buffer{}
    cmd.Stdout = cmdOutput
    err := cmd.Run()
    if err != nil {
      os.Stderr.WriteString(err.Error())
    }

    count, err := strconv.Atoi( string(cmdOutput.Bytes()) )
    if err != nil {
        log.Fatal(err)
    }

    if count <= 1024 {
        log.Fatal("This machine is not good for working!!!")
    }
}

这是我当前的错误:

  

2018/10/12 14:37:27 exec:“ ulimit -n”:在以下位置找不到可执行文件   $ PATH

我不明白此错误的含义以及如何解决。

1 个答案:

答案 0 :(得分:2)

在Linux中没有可以运行的ulimit程序。

ulimit是shell的内置函数。因此,您需要运行一个Shell并让该Shell运行其内部ulimit命令。

cmd := exec.Command("/bin/sh", "-c" "ulimit -n")

您还必须从ulimit命令的输出中删除换行符,例如

count, err := strconv.Atoi( strings.Trim(string(cmdOutput.Bytes()),"\n"))

一个更好的选择是通过go中的syscall API检索这些限制,请参阅How to set ulimit -n from a golang program?-接受的答案会首先获取并显示当前限制。