我試圖弄清楚如何從Go程序中啟動外部編輯器,等待用戶關閉編輯器,然后繼續執行程序。基于這個答案,我目前有以下代碼:package mainimport ( "log" "os" "os/exec")func main() { fpath := os.TempDir() + "/thetemporaryfile.txt" f, err := os.Create(fpath) if err != nil { log.Printf("1") log.Fatal(err) } f.Close() cmd := exec.Command("vim", fpath) err = cmd.Start() if err != nil { log.Printf("2") log.Fatal(err) } err = cmd.Wait() if err != nil { log.Printf("Error while editing. Error: %v\n", err) } else { log.Printf("Successfully edited.") }}當我運行程序時,得到以下信息:chris@DPC3:~/code/go/src/launcheditor$ go run launcheditor.go 2012/08/23 10:50:37 Error while editing. Error: exit status 1chris@DPC3:~/code/go/src/launcheditor$ 我也嘗試使用exec.Run()代替exec.Start(),但似乎也不起作用(盡管它不會在同一地方失敗)。如果我使用Gvim而不是Vim,我可以使它工作,但是它拒絕與Vim和nano一起工作。我認為這與在終端仿真器中運行而不是創建外部窗口的Vim和nano有關。
3 回答

白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
很顯然,你必須設置Stdin
,Stdout
并Stderr
在上Cmd
對象os.Std(in|out|err)
。像這樣(假設對象被稱為cmd
):
cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr
解決此問題的功勞歸功于freenode上#go-nuts上的家伙。

HUH函數
TA貢獻1836條經驗 獲得超4個贊
這對我有用,但是它的缺點是打開另一個終端(版本結束后會自動關閉):
cmd := exec.Command("/usr/bin/xterm", "-e", "vim "+fpath)

森欄
TA貢獻1810條經驗 獲得超5個贊
在中cmd := exec.Command("vim", fpath)
,您正在執行或多或少的操作:
$ PATH= vim foo.txt bash: vim: No such file or directory $
Shell使用PATH環境變量,exec.Command
而不使用。您必須查找vim
二進制文件并將其完整路徑傳遞給exec.Command
。exec.LookPath為您做到這一點。
- 3 回答
- 0 關注
- 247 瀏覽
添加回答
舉報
0/150
提交
取消