我試圖弄清楚如何從Go程序中啟動(dòng)外部編輯器,等待用戶(hù)關(guān)閉編輯器,然后繼續(xù)執(zhí)行程序?;谶@個(gè)答案,我目前有以下代碼: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.") }}當(dāng)我運(yùn)行程序時(shí),得到以下信息: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(),但似乎也不起作用(盡管它不會(huì)在同一地方失?。H绻沂褂肎vim而不是Vim,我可以使它工作,但是它拒絕與Vim和nano一起工作。我認(rèn)為這與在終端仿真器中運(yùn)行而不是創(chuàng)建外部窗口的Vim和nano有關(guān)。
3 回答

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

HUH函數(shù)
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
這對(duì)我有用,但是它的缺點(diǎn)是打開(kāi)另一個(gè)終端(版本結(jié)束后會(huì)自動(dòng)關(guān)閉):
cmd := exec.Command("/usr/bin/xterm", "-e", "vim "+fpath)

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