Давайте рассмотрим простой пример:
Process.run("ping", {"google.com"}) do |proc|
proc.output.each_line { |line| puts line }
end
который запускает процесс, постоянно считывая его вывод и выводя вывод на стандартный вывод. В настоящее время, когда я нажимаю клавишу, она просто появляется вместе с выводом запущенного процесса, но я хотел бы иметь какую-то обработку клавиш, чтобы я мог управлять запущенным процессом с клавиатуры: остановить его, или перезапустите его с измененными аргументами. Как это сделать?
Или, чтобы сузить вопрос, как сделать эту пару выход-вход неблокирующей друг для друга? В настоящее время он делает один шаг, а затем ждет, пока не произойдет его аналог.
Process.run("ping", {"google.com"}) do |proc|
until proc.output.closed?
puts proc.output.gets
puts "Got key: #{STDIN.raw &.read_char}"
end
end