首页 > 后端开发 > Golang > 为什么我的Go程序的`exec.Command`在终端中失败,但在控制台中成功?

为什么我的Go程序的`exec.Command`在终端中失败,但在控制台中成功?

Patricia Arquette
发布: 2024-12-22 01:52:10
原创
139 人浏览过

Why Does My Go Program's `exec.Command` Fail in the Terminal But Succeed in the Console?

使用参数调用命令:控制台成功,终端失败

在这种情况下,Go 程序成功执行带有两个参数的 top 命令( -n 10 和 -l 2),显示 10 个进程的详细信息。但是,添加附加参数 (-o cpu) 会导致错误:“无效参数 -o”。

问题

尝试执行时发生错误带有完整参数列表的终端的 top 命令 (-o cpu -n 10 -l 2)。但是,从控制台执行时,相同的命令可以按预期工作。

根本原因

问题源于操作系统解析参数的方式。通常,当从控制台执行命令时,每个参数都用空格分隔。然而,在 Go 程序中,参数作为单个字符串传递。这使得操作系统需要解释这些参数,在这种情况下它会错误地解释。

解决方案

要解决此问题,参数必须作为单独的参数传递字符串到 exec.Command 函数。以下代码演示了执行此操作的正确方法:

import (
    "os/exec"
)

func main() {
    app := "/usr/bin/top"

    cmd := exec.Command(app, "-o", "cpu", "-n", "10", "-l", "2")
    out, err := cmd.CombinedOutput()

    // Error handling omitted for brevity
    value := string(out)
    return value
}
登录后复制

通过将每个参数作为单独的字符串传递,操作系统可以正确解释命令并按预期执行它。这解决了错误并允许程序使用附加参数 (-o cpu) 成功显示 10 个进程的详细信息。

以上是为什么我的Go程序的`exec.Command`在终端中失败,但在控制台中成功?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板