我试图找出如何从Go程序中启动外部编辑器,等待用户关闭编辑器,然后继续执行该程序.根据这个 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: %v\n", err)
} else {
log.Printf("Successfully edited.")
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我得到了这个:
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$
Run Code Online (Sandbox Code Playgroud)
我也尝试使用exec.Run()而不是exec.Start(),但这似乎也没有用(虽然它不会在同一个地方失败).
如果我使用Gvim而不是Vim,我可以让它工作,但它拒绝使用Vim和nano.我认为这与在终端仿真器内运行的Vim和nano有关,而不是创建一个外部窗口.
cgt*_*cgt 11
显然,你必须设置Stdin,Stdout并Stderr在Cmd对象上os.Std(in|out|err).像这样(假设对象被调用cmd):
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
Run Code Online (Sandbox Code Playgroud)
解决这个问题的成果归功于freenode上的#go-nuts.
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |