Консоль Love2d в PyCharm записывает данные на консоль только после закрытия

#lua #pycharm #jetbrains-ide #love2d

#lua #pycharm #jetbrains-ide #love2d

Вопрос:

Я использую PyCharm community edition для создания приложения love2d. Я создал горячую клавишу, которая запускает .bat файл, чтобы запустить его с помощью lovec.exe , которая открывает консоль при запуске приложения, затем я создал external tool для запуска .bat файла с помощью сочетания клавиш, когда я использую его, консоль открывается в PyCharm, которая ничего не записывает, и после закрытия приложения появляется все, что должно было быть написано, когда я запускаю .bat файл вне PyCharm, он функционирует отлично.

Я хотел бы знать, есть ли очевидное исправление для этого или просто как запустить консоль вне pycharm с помощью внешнего инструмента.

Ответ №1:

Эта проблема связана со способом, которым Lua задерживает запись файлов, известным как «буферизация». Чтобы изменить это, поместите следующую команду в начало вашего файла:

 io.stdout:setvbuf( 'no' ) -- Switches buffering for stdout to be off
  

Подробнее читайте в руководстве по Lua:

file:setvbuf (mode [, size])

Устанавливает режим буферизации для выходного файла. Доступно три режима:

  • «нет»: нет буферизации; результат любой операции вывода отображается немедленно.
  • «полный»: полная буферизация; операция вывода выполняется только тогда, когда буфер заполнен или когда вы явно flush вводите файл (см. io.flush ).
  • «строка»: буферизация строк; вывод буферизуется до тех пор, пока не будет выведена новая строка или не будет получен какой-либо ввод из некоторых специальных файлов (например, с терминального устройства).

В последних двух случаях size указывается размер буфера в байтах. По умолчанию используется соответствующий размер.