Ich habe ein Go-Programm, das ein Ruby-Skript aufrufen sollte.Golang exec.Command lesen std Eingabe
Ich habe eine runCommand
Funktion:
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)
}
}
ich es wie folgt aufrufen:
runCommand("ruby", "-e", "require 'foo'")
Es ist für den meisten Fällen funktioniert, außer wenn es in den untergeordneten Prozess ein gets
oder eine ähnliche Operation das muss für eine Eingabe pausiert werden.
Ich habe versucht Einstellung cmd.Stdin = os.Stdin
, aber es wartet nicht auf Eingabe.
Was mache ich falsch?
Wenn es in Ruby 'gets 'gibt, können Sie Eingaben von Ihrer Konsole eingeben? Wartet Ruby darauf? Haben Sie nach Eingabe Ihrer Eingabe die Eingabetaste gedrückt? – icza
'gets' ist in der Mitte eines Flusses, und wenn ich das Ruby-Skript ausführen, wartet es auf eine Eingabe. Ja, ich drücke nach der Eingabe die Eingabetaste. Mein wirklicher Anwendungsfall ist es, auf der Ruby-Seite 'pry' aufzurufen, und meine Erwartung ist' cmd.Run() 'würde warten, bis die' PRY'-REPL abgeschlossen ist. –
Wenn ich [diese einfache Go-App] (http://play.golang.org/p/0eWjtN2RWG) von Ihrem Code aus starte, funktioniert es einwandfrei, wartet auf die Eingabe und druckt den output korrekt aus. Ich würde sagen, es ist etwas in Ihrem Ruby-Code. – icza