使用参数调用命令:控制台成功,终端失败
在这种情况下,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中文网其他相关文章!