在Golang中,是否有与Python的`os.system()`等效的函数?

huangapple go评论70阅读模式
英文:

Is there a equvilant of Python's `os.system()` in Golang?

问题

我想创建一个包装程序,可以包装用户提供的任何 shell 命令,例如:

./wrapper "cmd1 && cmd2"

在 Python 中,我可以调用 os.system("cmd1 && cmd2")。但是 Golang 的 exec.Command 需要一个命令和参数的列表。在 Golang 中是否有一种方法可以实现与 Python 的 os.system() 相同的功能?

英文:

I want to create a wrapper program that can wrapper whatever shell commands user provides, like:

./wrapper "cmd1 && cmd2"

In Python, I can call os.system("cmd1 && cmd2"). But Golang's exec.Command needs a list for command and args. Is there way in Golang to archive the same as Python's os.system()?

答案1

得分: 3

os/exec是Go语言中的一个包,用于执行外部命令。它提供了一个Command结构体,可以用来设置要执行的命令和参数。在你提供的示例代码中,os/exec包被导入并使用了。

示例代码中的main函数首先创建了一个exec.Command对象,该对象表示要执行的命令。在这个例子中,命令是/usr/bin/bash,参数是-cos.Args[1]os.Args[1]表示在运行程序时传递的第一个参数。

然后,代码调用cmd.CombinedOutput()方法来执行命令并获取输出结果。如果执行命令时发生错误,代码会抛出一个异常。最后,代码将输出结果转换为字符串并打印出来。

在你提供的示例中,命令是ls -alh && pwd,它会列出当前目录下的文件和文件夹,并打印当前工作目录的路径。

希望这个翻译对你有帮助!如果你有任何其他问题,请随时提问。

英文:

os/exec https://pkg.go.dev/os/exec

package main

import (
	"fmt"
    "os"
	"os/exec"
)

func main() {
	cmd := exec.Command("/usr/bin/bash", "-c", os.Args[1])
	output, err := cmd.CombinedOutput()
	if err != nil {
		panic(err)
	}
	fmt.Println(string(output))
}
$ go run main.go "ls -alh && pwd"
total 4.0K
drwxr-xr-x  2 xxxx xxxx 120 Nov 14 11:12 .
drwxrwxrwt 17 root root 420 Nov 14 11:42 ..
-rw-r--r--  1 xxxx xxxx 217 Nov 14 11:42 main.go
/tmp/stk


</details>



huangapple
  • 本文由 发表于 2022年11月14日 18:30:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/74430195.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定