擅长:python、mysql、java
<p><code>getche</code>从<em>控制台</em>读取,而不是从标准输入读取。如果Python进程在控制台窗口中运行,则子进程仍将尝试从同一控制台读取输入,而不是作为标准输入传入的管道。在</p>
<p>也许可以创建另一个不可见的控制台窗口,将其附加到子进程,并为其提供输入,但这非常复杂且容易出错。在</p>
<p>我建议您重写程序,只读取标准输入,而不使用<code>getche()</code>。如果你真的想让它对击键做出反应而不需要用户按Enter键,那么我建议让它根据标准输入是否来自终端来改变其行为。如果是,使用<code>getche</code>,如果不是,直接从<code>stdin</code>读取。您可以使用<a href="http://msdn.microsoft.com/en-us/library/f4s0ddew%28v=VS.90%29.aspx" rel="nofollow">^{<cd5>}</a>(或等效的POSIX <code>isatty</code>;由于某些原因,Microsoft决定在其运行时不推荐使用POSIX名称)。例如:</p>
<pre><code>int ReadChar()
{
if(_isatty(0))
{
// stdin is a terminal
return _getche();
}
else
{
// stdin is not a terminal
return getchar();
}
}
</code></pre>