登录
首页 >  Golang >  Go问答

运行外部命令并获取其结果

来源:stackoverflow

时间:2024-03-24 21:30:46 305浏览 收藏

在 Go 语言中执行外部命令时,需要使用 shell 运行内置命令 ulimit,并从输出中去除换行符。可以通过系统调用 API 获取限制,避免使用外部命令。

问题内容

我正在尝试执行 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": 找不到可执行文件 $路径

我不明白这个错误的含义以及如何修复它。


解决方案


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 中的系统调用 api 检索这些限制,请参阅 How to set ulimit -n from a golang program? - 接受的答案首先获取并打印当前限制。

本篇关于《运行外部命令并获取其结果》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>