英文:
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
,参数是-c
和os.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>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论