Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 执行外部命令并返回其输出_Go - Fatal编程技术网

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

Go 执行外部命令并返回其输出,go,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

我正在尝试执行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!!!")
    }
}
主程序包
进口(
“os/exec”
“操作系统”
“strconv”
_“fmt”
“日志”
“字节”
)
func main(){
cmd:=exec.Command(“ulimit”,“-n”)
cmdOutput:=&bytes.Buffer{}
cmd.Stdout=cmdOutput
err:=cmd.Run()
如果错误!=零{
os.Stderr.WriteString(err.Error())
}
计数,错误:=strconv.Atoi(字符串(cmdOutput.Bytes())
如果错误!=零{
log.Fatal(错误)
}

如果count在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检索这些限制,请参见-接受的答案首先获取并打印当前限制。

实际代码可能会说
exec.Command(“ulimit-n”)
(单参数),而不是
exec.Command(“ulimit”,“-n”)
(多参数)。如果不指定绝对路径,操作系统将始终在
$path
中列出的目录中查找该程序(并且没有名为“uname-n”的程序,因此出现错误)。我使用单个参数进行了更改,并返回相同的错误exec:“ulimit-n”:在$PATH2中找不到可执行文件在大多数系统上它既是内置文件又是二进制文件。请尝试
键入-P ulimit
(/usr/bin/ulimit在我的计算机上)。在我的任何ubuntu、fedora或centos机器上都没有。Interest。它随软件包一起提供给我。@不,它出现在我的fedora 28机器上:
哪个ulimit
->
/usr/bin/ulimit
是的,我想fedora或bash最近添加了它-但是如果从s运行
ulimit
,您仍然在使用内置的shell命令地狱。但是OP没有那个程序,否则围棋程序会起作用。(将ulimit作为一个程序听起来有点奇怪,但是,如果您想更改/设置ulimit,它不能作为一个单独的程序运行,因为ulimit只应用于当前进程及其子进程。这就是为什么它是shell的内置程序,因此shell可以更改自己的限制,并将其应用于从该shell中运行的任何未来程序。).)