У меня есть очень простой файл test.rb:
puts "Hello World"
Я хочу выполнить этот файл в c #, например:
var runtime = Ruby.CreateRuntime(); runtime.ExecuteFile("C:\test.rb");
Как я могу захватить «Hello World»«
ScriptRuntime имеет свойство IO, которое возвращает объект ScriptIO. Вы можете вызвать SetOutput и перенаправить вывод. Как уже упоминали другие, есть также Console.SetOut, который вы можете вызвать, если пользователь вызывает Console.WriteLine напрямую. Хорошая вещь об использовании ScriptIO, хотя вы можете иметь несколько сценариев в разных ScriptRuntime записи для разных выходов.
Вы можете перенаправить стандартный вывод и прочитать его в своей программе на C # , как показано здесь .
Одна вещь, которую вы можете сделать, это вызвать Console.setOut и / или Console.setErr перед ExecuteFile и снова после. В первый раз вы перенаправите вывод в выбранный вами поток, а затем восстановите его до предыдущего значения.
Я думаю, что этот пост отвечает на ваш вопрос.