Я думаю, что метод Timeout, описанный выше, вероятно, самый элегантный способ решения этой проблемы Другое решение, доступное на большинстве языков, использует select
. Вы передаете список файловых дескрипторов для мониторинга и необязательный таймаут. Код гораздо менее лаконичен:
ready_fds = select [ $stdin ], [], [], 10
puts ready_fds.first.first.gets unless ready_fds.nil?