Golang Go语言中是否有类 system() 函数
今天搜了一天 Google ,啥都没找到……
exec.Command
只能运行,并不能交互(很麻烦),而 syscall.Exec
则在子进程运行完后直接退出了。
有没有类似于 Python 里的 os.system()
,也就是 C/C++ 里的 system()
,可以让我直接运行某个需要交互的程序(例如 vim 或者 git )并可以与其交互且退出后原程序能够继续运行?
Golang Go语言中是否有类 system() 函数
good job
system=fork+exec+waitpid
感谢各位,用 cgo 解决问题了,看来 go 还是不太成熟……
不是 go 不成熟,是你技术不成熟而已,你并不理解“交互”是怎样实现的。
如果你理解了,自然会这样做:
package main
import (
“os”
“os/exec”
)
func main() {
cmd := exec.Command(“vim”)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
cmd.Run()
}
就这么简单。
cool , 赞这句话
哇,这个方法好多了,感谢!
在Golang(Go语言)中,并没有直接等同于C语言中的system()
函数的内置功能。system()
函数在C语言中用于执行操作系统命令,但Go语言在设计上更注重安全性和可移植性,因此没有提供直接执行系统命令的简便方法。
不过,Go语言提供了多种方式来间接实现类似system()
的功能,主要通过标准库中的os/exec
包。这个包允许你启动和管理外部进程,包括执行系统命令。
例如,你可以使用exec.Command
函数来创建一个代表外部命令的Cmd
对象,然后使用Cmd.Run
、Cmd.Start
或Cmd.Output
等方法来执行该命令。这种方法提供了更多的控制和灵活性,比如可以捕获命令的输出、设置环境变量、管理输入/输出管道等。
需要注意的是,执行外部命令可能会带来安全风险,特别是当命令的输入部分来自不可信的源时。因此,在使用os/exec
包时,务必小心处理输入数据,避免命令注入等安全问题。
总的来说,虽然Go语言没有内置的system()
函数,但通过os/exec
包提供的强大功能,你可以实现更灵活、更安全地执行系统命令的需求。如果你需要具体的代码示例或进一步的帮助,请随时提问。