Выполнить внешнюю команду и вернуть ее вывод - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь выполнить команду 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 голосов
/ 12 октября 2018

В linux нет программы ulimit, которую можно запустить.

ulimit - это встроенная оболочка.Поэтому вам нужно запустить оболочку и запустить ее внутреннюю команду ulimit.

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

вам также придется удалить символ новой строки из вывода команды ulimit, например,

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

Лучшей альтернативой является получение этих пределов с помощью API syscall в go, см. Как установить ulimit -n из программы golang? - принятый ответ сначала получает и печатает текущий предел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...