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.")
}
}
プログラムを実行すると、次のようになります。
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()
、それもうまくいかないようです(同じ場所で失敗することはありませんが)。
Vimの代わりにGvimを使用すれば動作させることができますが、Vimとnanoの両方で動作することを拒否します。これは、外部ウィンドウを作成するのではなく、ターミナルエミュレーター内で実行されるVimとnanoに関連していると思います。