У меня есть программа go, которая должна вызывать скрипт ruby.golang exec.Command read std input
У меня есть runCommand
функцию:
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)
}
}
Я призываю это так:
runCommand("ruby", "-e", "require 'foo'")
Он работает в большинстве случаев, за исключением случаев, есть gets
или любая подобная операция в дочернем процессе который необходимо приостановить для ввода.
Я пробовал установить cmd.Stdin = os.Stdin
, но он не дожидается ввода.
Что я делаю неправильно?
Когда в Ruby есть 'get', вы можете вводить ввод с консоли? Неужели Руби ждет этого? Вы нажимаете Enter после ввода вашего ввода? – icza
'get' находится в середине потока, и если я запустил скрипт ruby, он ждет ввода. Да, я нажимаю Enter после ввода. Мой реальный usecase - вызывать 'pry' на рубиновой стороне, и мое ожидание -' cmd.Run() 'будет ждать завершения' pry' REPL. –
Если я запустил [это простое приложение Go] (http://play.golang.org/p/0eWjtN2RWG) из вашего кода, он отлично работает, ждет ввода и правильно печатает outpout. Я бы сказал, что это что-то в вашем коде Ruby. – icza