msys не сбрасывает вывод

Я использую mingw с msys и minty на окнах. У меня проблема в том, что msys и mintty почему-то не сбрасывают вывод до тех пор, пока команда не будет завершена. Это означает, что я не могу запускать никакие интерактивные программы.

Например, если у меня есть в C:

printf("Test\n");

вывод не появится, пока программа не завершится. Однако, если у меня есть:

printf("Test\n"); fflush(stdout);

то вывод появляется сразу. Если я использую msys без mintty или консоли windows, то все работает нормально.

Итак, мой вопрос, что происходит с msys и minty?


person mihyar    schedule 31.01.2016    source источник


Ответы (2)


Это может быть проблемой, когда msys использует оболочку rxvt в ряде сценариев. В тех случаях, когда я вижу эту проблему, я прошу msys использовать родную оболочку Windows для своей консоли. Например:

C:\MinGW\msys\1.0\msys.bat --no-rxvt

Я думал, что современные установки MSYS по умолчанию используют собственную оболочку, поскольку разработчики MSYS, похоже, предпочитают ее. У меня есть другие проблемы с родной оболочкой, которые заставляют меня использовать оболочку rxvt, поэтому я редко сталкиваюсь с этой проблемой.

C:\MinGW\msys\1.0\msys.bat --rxvt

Я обнаружил, что оболочка rxvt обычно работает нормально, за исключением некоторых приложений, созданных как "консольные" утилиты, предназначенные для запуска из командной строки.

person kbulgrien    schedule 27.04.2016

Единственное, что у меня сработало, это поставить перед командой winpty...

$ winpty java ClassName

Это заставляет небуферизованный вывод быть в 3 раза медленнее, а буферизованный вывод - в 5 раз медленнее (в моем случае с Java).


Всегда иметь команду, невидимо вызываемую winpty ...

$ cd ~
$ pwd -W

... добавьте следующую строку в .bashrc ...

alias java="winpty java"

... затем перезапустите терминал и проигнорируйте (одноразовое) предупреждающее сообщение.

person veganaiZe    schedule 13.02.2019