Golang Go语言中是否有类 system() 函数

今天搜了一天 Google ,啥都没找到……

exec.Command 只能运行,并不能交互(很麻烦),而 syscall.Exec 则在子进程运行完后直接退出了。

有没有类似于 Python 里的 os.system(),也就是 C/C++ 里的 system(),可以让我直接运行某个需要交互的程序(例如 vim 或者 git )并可以与其交互且退出后原程序能够继续运行?


Golang Go语言中是否有类 system() 函数
9 回复

可以参考下 gotty

更多关于Golang Go语言中是否有类 system() 函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


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.RunCmd.StartCmd.Output等方法来执行该命令。这种方法提供了更多的控制和灵活性,比如可以捕获命令的输出、设置环境变量、管理输入/输出管道等。

需要注意的是,执行外部命令可能会带来安全风险,特别是当命令的输入部分来自不可信的源时。因此,在使用os/exec包时,务必小心处理输入数据,避免命令注入等安全问题。

总的来说,虽然Go语言没有内置的system()函数,但通过os/exec包提供的强大功能,你可以实现更灵活、更安全地执行系统命令的需求。如果你需要具体的代码示例或进一步的帮助,请随时提问。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!