Go 中是否有类 system() 函数

2016-09-04 11:34:59 +08:00
 SuperFashi

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

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

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

2145 次点击
所在节点    Go 编程语言
8 条回复
Phant0m
2016-09-04 11:41:10 +08:00
可以参考下 gotty
gxustudent
2016-09-04 11:48:36 +08:00
qiukun
2016-09-04 13:53:33 +08:00
@gxustudent good job
raysonx
2016-09-04 18:19:53 +08:00
system=fork+exec+waitpid
SuperFashi
2016-09-04 22:50:45 +08:00
@gxustudent
@raysonx
感谢各位,用 cgo 解决问题了,看来 go 还是不太成熟……
reus
2016-09-05 02:12:42 +08:00
不是 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()
}

就这么简单。
struCoder
2016-09-05 09:23:17 +08:00
@reus cool , 赞这句话
SuperFashi
2016-09-09 18:26:00 +08:00
@reus
哇,这个方法好多了,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303789

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX