【问题标题】:msys not flushing outputmsys 不刷新输出
【发布时间】:2016-01-31 00:53:34
【问题描述】:

我在 Windows 上使用 mingw 和 msys 和 mintty。我有一个问题,msys 和 mintty 在命令完成之前不会刷新输出。这意味着我不能真正运行任何交互式程序。

例如,如果我在C:

printf("Test\n");

在程序终止之前不会出现输出。但是,如果我有:

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

然后输出立即出现。如果我在没有 mintty 或 windows 控制台的情况下使用 msys,那么一切正常。

所以我的问题是,msys 和 mintty 是怎么回事?

【问题讨论】:

    标签: mingw msys mintty


    【解决方案1】:

    msys 在许多情况下使用 rxvt shell 时,这可能是一个问题。在我看到这个问题的情况下,我要求 msys 使用本机 Windows shell 作为其控制台。例如:

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

    我认为现代 MSYS 安装默认使用本机 shell,因为 MSYS 开发人员似乎更喜欢它。我的原生 shell 有其他问题促使我使用 rxvt shell,所以我很少遇到这个问题。

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

    我发现 rxvt shell 通常工作正常,除了某些构建为“控制台”实用程序的应用程序,旨在从命令行运行。

    【讨论】:

      【解决方案2】:

      唯一对我有用的是在命令前加上winpty ...

      $ winpty java ClassName
      

      它导致无缓冲输出慢 3 倍,缓冲输出慢 5 倍(在我的情况下,使用 Java)。


      始终让winpty 不可见地调用命令...

      $ cd ~
      $ pwd -W
      

      ...将以下行添加到.bashrc ...

      alias java="winpty java"
      

      ...然后重新启动终端并忽略(一次性)警告消息。

      【讨论】: