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



我通过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不是交互式终端的尝试。

相关内容

  • 没有找到相关文章

最新更新