在我的代码执行过程中的某个时候,我希望我的程序启动一个编辑器(不管是哪一个)供用户执行一些实时编辑。我需要我的程序在这一点上停止,直到用户决定关闭编辑器(或多或少git rebase的工作方式)以下是我的工作方式func main() { fpath := os.TempDir() + "/afile.txt" f, err := os.Create(fpath) if err != nil { log.Fatal(err) } defer f.Close() cmd := exec.Command("/usr/local/bin/code", fpath) err = cmd.Start() if err != nil { log.Fatal(err) } err = cmd.Wait() if err != nil { fmt.Println(err) }}不会打印任何错误,但是上面的代码,尽管它当然会打开 ,但它在用户关闭编辑器之前终止(返回)。vscode不应该处理这个问题吗?cmd.Wait()该程序在MacOS Catalina fwiw上执行。
2 回答
catspeake
TA贡献1111条经验 获得超0个赞
cmd.Wait() 不应该处理这个问题吗?
是的,确实如此。按预期等待,这是您的调用不正确,并且不会等待。的默认行为是在生成 VSCode 窗口后立即退出。它不会等待窗口关闭,因此 Go 不能等待窗口关闭。/usr/local/bin/code
code
尝试简单地在终端中输入。你会发现它会立即退出,甚至认为你的 VSCode 窗口仍处于打开状态。code
要在编辑器窗口关闭之前创建块(从而允许 Go 等待),您需要将 or 标志传递给它。再次尝试在终端中。在 VSCode 窗口关闭之前,你将找到终端命令块。code
-w
--wait
code -w
实际上,您只需要更改此设置...
cmd := exec.Command("/usr/local/bin/code", fpath)
对此:
cmd := exec.Command("/usr/local/bin/code", "-w", fpath) // or // cmd := exec.Command("/usr/local/bin/code", "--wait", fpath)
杨__羊羊
TA贡献1943条经验 获得超7个赞
根据 https://golang.org/pkg/os/exec/#Cmd.Start
“启动”将启动指定的命令,但不等待该命令完成。
如果 Start 成功返回,则将设置 c.Process 字段。
Wait 方法将返回退出代码,并在命令退出后释放关联的资源。
如果可以的话,你可以在底部找到,在linux中。strace code
+++ exited with 0 +++
基本上,启动 vscode 的命令会退出(一种分叉),因此不会等待返回。clones
strace code -w
实际上等待 vscode 退出。
- 2 回答
- 0 关注
- 104 浏览
添加回答
举报
0/150
提交
取消