Git-for-Windows Mintty sys.stdout.isatty()返回False

时间:2016-12-01 13:35:16

标签: windows mintty

我通过Git-for-Windows和CPython35-32使用mintty。为什么Python认为它没有附加到终端?

$ python -c "import sys; print(sys.stdout.isatty())"
False

有趣的是,我还有一个问题,即我无法在薄荷内部启动Python的交互式会话。它可能与此问题有关

$ python
<nothingness here...>

2 个答案:

答案 0 :(得分:2)

幕后的

mintty's console emulation uses pipes to emulate a tty混淆了本机程序检查它们是否附加到tty。在你的情况下,Python isatty()认为stdout由于假tty而附加到管道并返回False。

这是mintty issue #56 - Improve support for native console programs的另一个例子。 mintty wiki entry "Input/Output interaction with alien programs"指出,您可以在运行问题程序时使用类似winpty的包装器解决问题。

@vonc提到的git提交只解决git程序本身的问题 - 它们不会影响其他程序(例如运行在git-for-window中的Python)在他们自己的来源中实施git的解决方法。

答案 1 :(得分:0)

您可能想尝试使用Git 2.12(2017年第1季度)

commit a9b8a09Jeff Hostetler (jeffhostetler)(2016年12月22日) 请commit 8692483查看Alan Davies (scooter6386)(2016年12月22日) 请commit fee807c查看Johannes Schindelin (dscho)(2016年12月22日) Junio C Hamano -- gitster --于2016年12月27日commit 58fcd54合并)

  

mingw:替换isatty() hack

     

Git for Windows带有一个依赖于MSVC运行时内部的补丁,但它在最近的MSVC运行时无法正常工作。
  最初编写的替换文件用于使用VC ++进行编译。

     

此邮件中的补丁是该替换的后端,它还修复了先前使isatty()告知/dev/null 是交互式终端的尝试。< / p>