linux – 尝试从Go程序中启动外部编辑器
发布时间:2020-12-13 18:49:32 所属栏目:Linux 来源:网络整理
导读:我试图找出如何从Go程序中启动外部编辑器,等待用户关闭编辑器,然后继续执行该程序.根据 this SO答案,我目前有这个代码: package mainimport ( "log" "os" "os/exec")func main() { fpath := os.TempDir() + "/thetemporaryfile.txt" f,err := os.Create(fpa
我试图找出如何从Go程序中启动外部编辑器,等待用户关闭编辑器,然后继续执行该程序.根据
this SO答案,我目前有这个代码:
package main import ( "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: %vn",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 1 chris@DPC3:~/code/go/src/launcheditor$ 我也尝试使用exec.Run()而不是exec.Start(),但这似乎也不起作用(虽然它不会在同一个地方失败). 如果我使用Gvim而不是Vim,我可以让它工作,但它拒绝使用Vim和nano.我认为这与在终端仿真器内运行的Vim和??nano有关,而不是创建一个外部窗口. 解决方法
显然,你必须将Cmd对象上的Stdin,Stdout和Stderr设置为os.Std(in | out | err).像这样(假设对象被称为cmd):
cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr 解决这个问题的成果归功于freenode上的#go-nuts. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |