在我的代碼執行過程中的某個時候,我希望我的程序啟動一個編輯器(不管是哪一個)供用戶執行一些實時編輯。我需要我的程序在這一點上停止,直到用戶決定關閉編輯器(或多或少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 關注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消