我正在尝试执行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
我不明白此错误的含义以及如何解决。
答案 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?-接受的答案会首先获取并显示当前限制。