У меня действительно странная проблема. Вот простой код, использующий puts:
puts "Dale"
sleep 1
puts "Cooper"
У меня есть 3 разных терминала/консоли:
- Консоль Windows (по умолчанию в системе)
- mingw64 (UNIX-подобный терминал, установленный вместе с Git)
- cygwin64 (UNIX-подобный терминал)
Вот странная вещь: код работает как положено только в стандартной консоли Windows. UNIX-подобные терминалы ждут 1 секунду и только потом показывают вывод (обе строки одновременно). По сути, UNIX-подобные терминалы ждут выхода программы, а затем показывают окончательный результат вывода.
Если я заменю puts на print, это не повлияет на процесс выполнения. UNIX-подобные терминалы по-прежнему будут задерживать вывод до тех пор, пока программа не завершит работу.
Но следующие два примера работают правильно во всех 3-х терминалах/консолях:
system("echo Dale")
sleep 1
system("echo Cooper")
Этот добавляет кавычки, но в остальном код работает так, как ожидалось.
p "Dale"
sleep 1
p "Cooper"
Сказав это, я предполагаю, что это как-то связано с Ruby. Пробовал разные версии Ruby.
Может кто-нибудь объяснить, почему это происходит и каковы возможные способы обойти эту проблему?