Bir ruby komut dosyasını çağırması gereken bir programım var.golang exec.Command std girişini oku
func runCommand(cmdName string, arg ...string) {
cmd := exec.Command(cmdName, arg...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
err = cmd.Run()
if err != nil {
fmt.Printf("Failed to start Ruby. %s\n", err.Error())
os.Exit(1)
}
}
Ben bunu böyle çağırmak:
BirrunCommand
işlevi var
Bir
gets
veya çocuk sürecinde benzer herhangi bir işlem yapılmazsa dışında çoğu durum için çalışır
runCommand("ruby", "-e", "require 'foo'")
bir giriş için duraklatması gerekiyor.
cmd.Stdin = os.Stdin
'u ayarlamayı denedim, ancak girişi beklemiyor.
Neyi yanlış yapıyorum?
Ruby'de 'gets' olduğunda, konsolunuzdan giriş girebilir misiniz? Ruby bunun için bekler mi? Girişinizi girdikten sonra Enter'a basar mısınız? – icza
'gets' bir akışın ortasındadır ve ruby komut dosyasını çalıştırırsam bir girdi bekler. Evet, girdiden sonra enter tuşuna bastım. Benim gerçek usecase ruby tarafında 'pry' çağırmaktır, ve benim beklentim' cmd.Run() '' pry' REPL tamamlamak için beklerdi. –
Kodunuzdan [bu basit Go uygulamasını] (http://play.golang.org/p/0eWjtN2RWG) çalıştırırsam, mükemmel çalışır, girişi bekler ve çıktıyı düzgün şekilde yazdırır. Ruby kodunda bir şey olduğunu söyleyebilirim. – icza