Я пытаюсь выяснить, как запустить внешний редактор из программы Go, дождаться закрытия пользователем редактора и продолжить выполнение программы. На основе this SO ответа, я в настоящее время этот код:Попытка запуска внешнего редактора из программы Go
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.")
}
}
Когда я запускаю программу, я получаю это:
[email protected]:~/code/go/src/launcheditor$ go run launcheditor.go
2012/08/23 10:50:37 Error while editing. Error: exit status 1
[email protected]:~/code/go/src/launcheditor$
Я также попытался с помощью exec.Run() вместо Exec. Start(), но это, похоже, не работает (хотя оно не терпит неудачу в одном и том же месте).
Я могу заставить его работать, если я использую Gvim вместо Vim, но он отказывается работать как с Vim, так и с nano. Я думаю, что это связано с тем, что Vim и nano работают внутри эмулятора терминала вместо создания внешнего окна.
Я пробовал, но он все еще не работает. Кроме того, это не может быть объяснением, так как использование просто «gvim» отлично работает. – cgt
Проверено. Ты прав. Пока не знаю причины. Вглядываясь в него. – zzzz