У меня есть простая задача, которая должна ждать, когда что-то изменится в файловой системе (это по существу компилятор для прототипов). Поэтому у меня есть простой бесконечный цикл с 5-секундным сном после проверки изменений файлов.Обнаружение нажатия клавиши (неблокирование) без getc/gets в Ruby
loop do
# if files changed
# process files
# and puts result
sleep 5
end
Вместо Ctrl+C
салют, я предпочел бы быть в состоянии проверить и посмотреть, если клавиша была нажата, не блокируя петлю. По сути, мне просто нужен способ узнать, есть ли входящие нажатия клавиш, затем способ захватить их до тех пор, пока Q не будет удовлетворен, а затем выйдите из программы.
Что я хочу:
def wait_for_Q
key_is_pressed && get_ch == 'Q'
end
loop do
# if files changed
# process files
# and puts result
wait_for_Q or sleep 5
end
Или это что-то Руби просто не делает (а)?
К сожалению, я на окнах, и это бросает Errno :: EBADF или ошибку плохого файла. Я исследую свои варианты. –
Попробуйте захватить EBADF с помощью EINTR и EAGAIN- это может быть просто временная ошибка, пока вы на самом деле не вводите какой-либо ввод (не уверен, а не в windows). – rampion
Могу ли я сделать то же самое на C или PHP или Perl? любой код там? –