msys not flushing output

房东的猫 提交于 2019-11-28 11:28:26

问题


I'm using mingw with msys and mintty on windows. I have a problem that msys and mintty are somehow not flushing output until a command is finished. This means I can't really run any interactive programs.

For example, if I have in C:

printf("Test\n");

the output won't appear until the program has terminated. However, if I have:

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

then the output appears immediately. If I use msys without mintty or the windows console, then everything works normally.

So my question, what's going on with msys and mintty?


回答1:


This can be an issue when msys uses the rxvt shell under a number of scenarios. In cases where I see this problem, I ask msys to use the native Windows shell for its console. For example:

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

I thought that modern MSYS installations default to using the native shell as MSYS developers seem to prefer it. I have other issues with the native shell that drive me to use the rxvt shell, so I do infrequently run into this issue.

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

I find that the rxvt shell usually works fine except for certain applications that are built as "console" utilities meant to run from a command-line.




回答2:


The only thing that worked for me was to precede the command with winpty ...

$ winpty java ClassName

It causes unbuffered output to be 3x slower and buffered output to be 5x slower (in my case, with Java).


To always have a command invisibly invoked by winpty ...

$ cd ~
$ pwd -W

... add the following line to .bashrc ...

alias java="winpty java"

... then restart terminal and ignore the (one-time) warning message.



来源:https://stackoverflow.com/questions/35109086/msys-not-flushing-output

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!