我通过Git-for-Windows和CPython35-32使用mintty。为什么 Python 认为它没有附加到终端?
$ python -c "import sys; print(sys.stdout.isatty())"
False
有趣的是,我还有一个问题,即我无法在mintty中启动Python的交互式会话。可能与此问题有关
$ python
<nothingness here...>
> Mintty的控制台仿真使用管道在幕后模拟TTY,这会混淆本机程序检查它们是否附加到TTY。在您的情况下,Python 的isatty()
认为 stdout 由于假 tty 而连接到管道并返回 False。
这是mintty问题#56的另一个示例 - 改进对本机控制台程序的支持。mintty wiki条目"与外来程序的输入/输出交互"指出,在mintty中运行问题程序时,您可以通过使用像winpty这样的包装器来解决此问题。
@vonc提到的 git 提交只能在 git 程序本身中解决问题 - 它们不会影响其他程序(例如在 git-for-window 的 mintty 中运行的 Python),这些程序需要在自己的源代码中实现 git 的解决方法。
你可能想在 Git 2.12(2017 年第 1 季度)中尝试一下
请参阅提交 a9b8a09 (2016 年 12 月 22 日) 由 Jeff Hostetler (jeffhostetler
)。
参见 提交8692483 (2016 年 12 月 22 日) 由 Alan Davies (scooter6386
)。
参见 commit fee807c (2016 年 12 月 22 日),作者:Johannes Schindelin (dscho
)。
(由Junio C Hamano --gitster
-- 在提交58fcd54中合并,2016年12月27日)
mingw
:替换isatty()
黑客Git for Windows 带有一个依赖于 MSVC 运行时内部的补丁,但它在最近的 MSVC 运行时中无法正常工作。
最初编写了一个替换程序,用于使用 VC++ 进行编译。此消息中的修补程序是该替换的向后移植,它还修复了先前尝试使
isatty()
告诉/dev/null
不是交互式终端的尝试。