擅长:python、mysql、java
<p>真正的问题是,当您在任何一个Cygwin终端程序(如mintty)中运行命令时,它们都不能充当Windows控制台。只有像CMD或Console2这样基于Windows控制台的操作系统才能做到这一点。因此,对于Cygwin终端,Windows python.exe不认为它在与交互控制台对话。</p>
<p>这将导致缓冲输出,而不是像在交互会话中那样刷新每一行上的缓冲区。这就是为什么Amro在每一行添加flush()可以修复症状,但意味着要更改代码。</p>
<p>不更改代码的一种解决方案是使用命令行上的'-u'标志或设置PYTHONUNBUFFERED环境变量来关闭Python中的缓冲。</p>
<pre><code>export PYTHONUNBUFFERED=1
/cydrive/c/Python27/python.exe foo.py
</code></pre>
<p>或者</p>
<pre><code>/cydrive/c/Python27/python.exe -u foo.py
</code></pre>
<p>或以交互模式运行</p>
<pre><code>/cydrive/c/Python27/python.exe -i foo.py
</code></pre>
<p>您也将无法在Cygwin终端中运行Windows python.exe交互模式。它不会启动交互式会话,但会挂起。我发现最好的解决方案似乎是使用“cygstart”(比使用“-I”选项更好):</p>
<pre><code>cygstart /cygdrive/c/Python27/python.exe
</code></pre>
<p>这似乎也适用于ipython(如果安装了):</p>
<pre><code>cygstart /cygdrive/c/Python27/Scripts/ipython.exe
</code></pre>