49

我遇到了与Python 无法在 git bash 的命令行中工作相同的问题,在 Git Bash 中,当我输入 时Python,它只是挂起。

但是,打字winpty python效果很好。

究竟是winpty什么?为什么上面的命令有用?

4

1 回答 1

40

winpty是一个 Windows 软件包,提供类似于 Unix pty-master 的接口,用于与 Windows 控制台程序进行通信。

这就是为什么您需要它,如此处所述

该软件通过winpty-agent.exe使用新的隐藏控制台窗口启动进程来工作,该窗口在控制台 API 和终端输入/输出转义码之间架起了桥梁。它轮询隐藏控制台的屏幕缓冲区以查找更改并生成相应的输出流。

rprichard/winpty提到:

该软件包由一个库 (libwinpty) 和一个用于 Cygwin 和 MSYS 的工具组成,用于在 Cygwin/MSYS pty 中运行 Windows 控制台程序。

如“mintty/mintty 提示”中所述:

当与使用本机 Windows API 进行命令行用户交互(“控制台模式”)的程序进行交互时,会观察到许多不良影响;这是pty不兼容问题字符编码不兼容问题
这基本上会影响所有未在 cygwin 或 msys 环境中编译的程序(请注意,MinGW 在此上下文中不是 msys)。

作为一种解决方法,您可以将winpty其用作包装器来调用 Windows 程序。


所以:

为什么许多工具在普通的 CygWin 中工作,但其中一些还需要 winpty?

在issue 2645中提出了这个问题(特别是针对 Python)msys2/MINGW-packages

使用 winpty 的成本不为零,而且大多数情况下,mintty 都可以正常工作。
您的问题源于尝试使用本机 Windows 构建的 mingw python,因此希望从 Windows 控制台使用它。
mintty 使用管道进行输入/输出,因此对于大多数程序来说,它看起来不像是一个合适的终端。

另一方面,如果您使用 msys2(或 cygwin)python(.eg /usr/local/bin/python2),一切正常。

(使用msys2/MINGW-packagesPR 2675,python3 正确检测到终端)

于 2018-01-11T05:41:26.743 回答